home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 10828 / 10828.xpi / chrome / content / newtabking-pre-min.js < prev    next >
Text File  |  2010-02-13  |  96KB  |  2,855 lines

  1. var globalAutoCompleteResult;
  2.  
  3. var NTK = {
  4.     document: null,
  5.     window: null,
  6.     DOMParser: null,
  7.     personalAccessStats: "",
  8.     globalAutoCompleteResult: null,
  9.     globalAutoCompleteSearch: "",
  10.     globalAutoSearchInProgress: 0,
  11.     globalsearchShortcutsList: "",
  12.     box3Const: 0,
  13.     box3ConstBarConst: 30,
  14.     faviconService: Components.classes["@mozilla.org/browser/favicon-service;1"].getService(Components.interfaces.nsIFaviconService),
  15.     prefs: Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.ntk."),
  16.     historyService: Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsINavHistoryService),
  17.     completeService: Components.classes["@mozilla.org/autocomplete/search;1?name=history"].getService(Components.interfaces.nsIAutoCompleteSearch),
  18.     mystrings: Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService).createBundle("chrome://newtabking/locale/newtabking.properties")
  19. };
  20.  
  21. function getRes(key)    {
  22.     return NTK.mystrings.GetStringFromName(key);
  23. }
  24.  
  25. function getHistoryComplete(i, j) {
  26.     if (i == NTK.globalAutoCompleteSearch) return;
  27.     if (i == '') {
  28.         w.stop();
  29.         return;
  30.     }
  31.  
  32.     getGoogleSuggest(i);
  33.     if (NTK.globalAutoSearchInProgress > 0) {
  34.         NTK.completeService.stopSearch();
  35.     }
  36.     NTK.globalAutoSearchInProgress++;
  37.     GRI = null;
  38.     var e, k;
  39.     NTK.globalAutoCompleteSearch = i;
  40.     if (window.event) {
  41.         e = window.event.keyCode
  42.     } else {
  43.         if (j) {
  44.             e = j.which
  45.         }
  46.     }
  47.  
  48.     if (i.length <= 2) {
  49.         var h = parseInt(i);
  50.         if (e == 13 && h >= 1 && h <= 99) {
  51.             var l = document.getElementById("r_" + (h - 1));
  52.             if (l == null) {
  53.                 return
  54.             }
  55.             nav(l.parentNode.href);
  56.             return true
  57.         }
  58.         if (h >= 1 && h <= 99) {
  59.             NTK.globalAutoCompleteSearch = "+!*+" + document.getElementById("r_" + (h - 1)).parentNode.href
  60.         }
  61.     }
  62.  
  63.     if (e == 13 && globalArrowsUsed == false) {
  64.         nav(navGo(i))
  65.     }
  66.     if (e == 38 || e == 40) {
  67.         globalArrowsUsed = true
  68.     }
  69.  
  70.     NTK.completeService.startSearch(i, "", globalAutoCompleteResult, myListener);
  71. }
  72.  
  73. function isTabPressed(h) {
  74.     var f;
  75.     if (window.event) {
  76.         f = window.event.keyCode
  77.     } else {
  78.         if (h) {
  79.             f = h.which
  80.         }
  81.     }
  82.     if (f == 13) {
  83.         var x = document.getElementById('searchboxy').value;
  84.         //window.location = 'http://search.newtabking.com/?q=x';
  85.         nav(navGo(x));
  86.     }
  87.     if (f == 9) {
  88.         h.preventDefault();
  89.         try {
  90.             var g = QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIWebNavigation).QueryInterface(Components.interfaces.nsIDocShellTreeItem).rootTreeItem.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindow)
  91.         } catch(h) {
  92.             if (window.opener) {
  93.                 var g = window.opener
  94.             }
  95.         }
  96.  
  97.         var e = g.document.getElementById("urlbar");
  98.         e.focus();
  99.         e.select();
  100.         return false
  101.     }
  102. }
  103.  
  104. var myListener = {
  105.     QueryInterface: function (b) {
  106.         if (b.equals(Components.interfaces.nsIAutoCompleteObserver)) {
  107.             return this
  108.         }
  109.         throw Components.results.NS_NOINTERFACE
  110.     },
  111.  
  112.     onSearchResult: function (S, N) {
  113.         //if (N.searchString != document.getElementById('searchboxy').value)    return;
  114.         //if (N.searchResult==4 && NTK.globalAutoSearchInProgress>1)    {    NTK.globalAutoSearchInProgress--;    return;    }
  115.         globalAutoCompleteResult = N;
  116.         var ab, ao, U, aa, aq, O, ai, ac, L, am, M, ah, ad, Y, K, aj, X, Q, R, W, ak, ag, ap, T, al, an, af, Z, P, i;
  117.         L = '<li class="item" onselect="navGo(document.getElementById("searchboxy").value)">';
  118.         L += '<img style="vertical-align:top" height="15px" ';
  119.  
  120.         var str = getRes("GoRightTo");
  121.         if (NTK.globalAutoCompleteSearch.substring(0, 4) == "+!*+") {
  122.             L += ' src="ntkExt16x16.png"/> '+str+': <u><strong>' + NTK.globalAutoCompleteSearch.substring(4, NTK.globalAutoCompleteSearch.length) + "</strong>";
  123.             GRI = L.substring(0);
  124.             NTK.globalAutoSearchInProgress--;
  125.             return 0
  126.         }
  127.         var V = getSearchShortcut(NTK.globalAutoCompleteSearch);
  128.         if (V == false) {
  129.             L += ' src="images/magglass.png"/> <b>' + NTK.globalAutoCompleteSearch + "</b>"
  130.         } else {
  131.             L += ' src="ntkExt16x16.png"/> '+str+': <u><strong>' + V + "</strong>";
  132.             GRI = L.substring(0);
  133.             NTK.globalAutoSearchInProgress--;
  134.             return 0
  135.         }
  136.         L += "</u></li>";
  137.         GRI0 = L.substring(0);
  138.         L = '';
  139.         af = getBlackList();
  140.  
  141.         //alert(N.searchString + ' / ' + N.matchCount);
  142.         var ma = NTK.prefs.getIntPref('searchbarNumHistory');
  143.         for (Z = 0; Z < ma && Z < N.matchCount; Z++) {
  144.             if (N.getValueAt(Z) != null) {
  145.                 ah = N.getValueAt(Z);
  146.  
  147.                 an = false;
  148.                 for (P = 0; P < af.length; P++) {
  149.                     if (ah.indexOf(af[P]) >= 0) {
  150.                         an = true;
  151.                         break
  152.                     }
  153.                 }
  154.                 if (an) {
  155.                     continue
  156.                 }
  157.                 if (!NTK.historyService) {
  158.                     NTK.globalAutoSearchInProgress--;
  159.                     return null;
  160.                 }
  161.                 ak = NTK.historyService.getNewQueryOptions();
  162.                 ag = NTK.historyService.getNewQuery();
  163.                 ak.maxResults = 10;
  164.                 ag.uri = getNSIURI(ah);
  165.                 ag.hasUri = true;
  166.                 T = NTK.historyService.executeQuery(ag, ak);
  167.                 al = T.root;
  168.                 al.containerOpen = true;
  169.                 R = 1;
  170.                 W = 0;
  171.                 if (al.childCount > 0) {
  172.                     i = al.getChild(0);
  173.                     R = i.accessCount;
  174.                     W = getLastAccess(i.time)
  175.                 }
  176.                 al.containerOpen = false;
  177.                 M = N.getCommentAt(Z);
  178.                 if (M.length > 96) {
  179.                     M = M.substr(0, 96) + "..."
  180.                 }
  181.                 ad = M.toLowerCase();
  182.                 Y = N.searchString.toLowerCase(); //NTK.globalAutoCompleteSearch.toLowerCase();
  183.                 K = ad.indexOf(Y);
  184.                 if (K >= 0) {
  185.                     aj = M.substr(K, N.searchString.length); //NTK.globalAutoCompleteSearch.length);
  186.                     M = M.replace(aj, "<strong><u><strong>" + aj + "</strong></u></strong>")
  187.                 }
  188.                 if (ah.length > 74) {
  189.                     ah = ah.substr(0, 74) + "..."
  190.                 }
  191.                 X = ah.toLowerCase();
  192.                 K = X.indexOf(Y);
  193.                 if (K >= 0) {
  194.                     aj = ah.substr(K, N.searchString.length); //NTK.globalAutoCompleteSearch.length);
  195.                     ah = ah.replace(aj, '<xxx class="autocompleteHigh">' + aj + "</xxx>")
  196.                 }
  197.  
  198.                 //ah=ah.replace(NTK.globalAutoCompleteSearch,"<u><strong>"+NTK.globalAutoCompleteSearch+"</strong></u>");
  199.                 ah = ah.replace(N.searchString, "<u><strong>" + N.searchString + "</strong></u>");
  200.  
  201.                 if (M == "") {
  202.                     M = ah
  203.                 }
  204.                 var str = getRes("TotalVisits");
  205.                 var str2 =getRes("MostRecentVisit");
  206.                 M = '<img style="vertical-align:middle" height="15px" src="' + N.getImageAt(Z) + '"/> ' + M;
  207.                 am = '<span class="stats"><b>'+str+': ' + R + '<br></b> '+str2+': ' + W + "</span>" + M + '<div align="left"  class="suggestURL">' + ah + "</div>";
  208.                 L += '<li class="item"  onselect="' + N.getValueAt(Z) + '">' + am + "</li>"
  209.             }
  210.         }
  211.  
  212.         var ae = GRI;
  213.         if (N.searchString == document.getElementById('searchboxy').value) {
  214.             GRI = L.substring(0);
  215.         }
  216.         //alert(N.searchResult +' '+GRI);
  217.  
  218.  
  219.         if (N.searchResult == 4 || N.searchResult == 3) {
  220.             //if (w.L.style.display!="none")            {                          }
  221.             //document.getElementById('editStuff').innerHTML += '.'+( NTK.globalAutoSearchInProgress);
  222.             //if (NTK.globalAutoSearchInProgress==1)    {
  223.             if (N.searchString == document.getElementById('searchboxy').value) {
  224.                 //    alert(N.searchResult + ' ' +N.searchString + ' ' + document.getElementById('searchboxy').value);
  225.                 //w.stop();
  226.                 //w.d("d");    
  227.                 //alert (document.getElementById('searchboxy').value);
  228.                 w.c();
  229.                 setTimeout(function () {
  230.                     w.T = setTimeout(w.$r, 10)
  231.                 }.bind(w, 0.01), 4);
  232.  
  233.             }
  234.             NTK.globalAutoSearchInProgress--;
  235.         }
  236.  
  237.  
  238.         if (N.searchResult != 4 && GRI != '' && ae != GRI) { //&&ae!=GRI+GRI2){
  239.             //    document.getElementById('no_0a_autocomplete_list').innerHTML += '<span style=\'padding:0\'></span><li class="item">stam</li>';
  240.             //    document.getElementById('no_0b_autocomplete_list').innerHTML += '<span style=\'padding:0\'></span><li class="item">stam</li>';    
  241.         };
  242.         return 0
  243.     },
  244.  
  245. };
  246.  
  247. function navHome() {
  248.     var c = document.createElement("MyExtensionDataElement");
  249.     c.setAttribute("attribute1", "foobar");
  250.     c.setAttribute("attribute2", "hello world");
  251.     document.documentElement.appendChild(c);
  252.     var d = document.createEvent("Events");
  253.     d.initEvent("NTK_SettingChange", true, false);
  254.     c.dispatchEvent(d);
  255.     window.location = "chrome://newtabking/content/newtabking2.htm"
  256. }
  257. function getVisitsForUrl(k) {
  258.     var l, g, i, h, j;
  259.     g = NTK.historyService.getNewQueryOptions();
  260.     i = NTK.historyService.getNewQuery();
  261.     g.maxResults = 1;
  262.     i.uri = getNSIURI(k);
  263.     i.hasUri = true;
  264.     queryRes = NTK.historyService.executeQuery(i, g);
  265.     h = queryRes.root;
  266.     h.containerOpen = true;
  267.     l = 1;
  268.     if (h.childCount > 0) {
  269.         j = h.getChild(0);
  270.         l = j.accessCount
  271.     }
  272.     h.containerOpen = false;
  273.     return l
  274. }
  275.  
  276. function navGo(d) {
  277.     var e = getSearchShortcut(d);
  278.  
  279.     if (e != false) {
  280.         return e
  281.     }
  282.     if (d.substr(0, 3) == "www") {
  283.         return "http://" + d
  284.     } else {
  285.         if (d.substr(0, 4) == "http") {
  286.             return (d)
  287.         } else {
  288.             if (d.indexOf(".") > 2) {
  289.                 return ("http://" + d)
  290.             } else {
  291.                 var f = getSearchURL();
  292.                 return (f + d)
  293.             }
  294.         }
  295.     }
  296. }
  297.  
  298. function getSearchURL() {
  299.     var d = 3;
  300.     try {
  301.         d = NTK.prefs.getIntPref("ntksearchEngine-pref")
  302.     } catch(c) {
  303.         NTK.prefs.setIntPref("ntksearchEngine-pref", 3)
  304.     }
  305.     switch (d) {
  306.     case 0:
  307.         return "http://www.ask.com/web?q=";
  308.         break;
  309.     case 1:
  310.         return "http://www.bing.com/search?q=";
  311.         break;
  312.     case 2:
  313.         return "http://www.google.com/search?q=";
  314.         break;
  315.     case 4:
  316.         return "http://en.wikipedia.org/wiki/Special:Search?search=";
  317.         break;
  318.     case 5:
  319.         return "http://search.yahoo.com/search?p=";
  320.         break;
  321.     case 6:
  322.         return "http://www.google.co.uk/search?q=";
  323.         break;
  324.     case 7:
  325.         return "http://www.google.es/search?q=";
  326.         break;
  327.     case 8:
  328.         return "http://www.google.fr/search?q=";
  329.         break;
  330.     case 9:
  331.         return "http://www.google.de/search?q=";
  332.         break;
  333.     case 10:
  334.         return "http://www.google.it/search?q=";
  335.         break;
  336.     case 11:
  337.         return "http://www.google.ru/search?q=";
  338.         break;
  339.     case 16:
  340.         return "http://www.google.no/search?q=";
  341.         break;
  342.     case 17:
  343.         return "http://www.google.co.nz/search?q=";
  344.         break;
  345.     case 18:
  346.         return "http://www.google.com.au/search?q=";
  347.         break;
  348.     case 19:
  349.         return "http://www.search.com/search?q=";    
  350.         break; 
  351.     case 20:
  352.         return "http://swagbucks.com/?t=w&p=1&q=";    
  353.         break;
  354.     case 21:
  355.         return "http://www.google.at/search?q=";
  356.         break;
  357.                
  358.     case 12:
  359.         return "http://www.google.com.br/search?q=";
  360.         break;
  361.     case 13:
  362.         return "http://www.baidu.com/s?wd=";
  363.         break;
  364.     case 14:
  365.         return "http://www.yandex.ru/yandsearch?clid=140494&text=";    
  366.         break;
  367.     case 15:
  368.         return "http://www.kvasir.no/alle?q=";
  369.         break;
  370.     default:
  371.         return "http://" + getSearchSite() + "/?cx=" + adSenseChannel + "&cof=FORID:9&ie=utf-8&q=";
  372.         break
  373.     }
  374. }
  375. function getSearchShortcut(j) {
  376.     var h, k, l, i;
  377.     for (var g = 0; g < NTK.globalsearchShortcutsList.length; g++) {
  378.         if (NTK.globalsearchShortcutsList[g] == "") {
  379.             continue
  380.         }
  381.         h = NTK.globalsearchShortcutsList[g].split("::");
  382.         if (j == h[1]) {
  383.             return h[0]
  384.         }
  385.     }
  386.     return false
  387. }
  388. function getSearchSite() {
  389.     var c;
  390.     try {
  391.         c = NTK.prefs.getCharPref("searchSite")
  392.     } catch(d) {}
  393.     if (c == "" || c == null) {
  394.         return "search.newtabking.com"
  395.     }
  396.     return c
  397. }
  398.  
  399.  
  400. var adSenseChannel = "partner-pub-0262891402493658:mqkypu-b0gi";
  401. const checkSeachEngEveryNewTab = 20;
  402. const thumbnailMaxChars = 32;
  403. const brothersoft = false;
  404.  
  405. var gSearchStart = new Array();
  406.  
  407. function checkSearchEngines() {
  408.     var r = Math.floor(Math.random() * checkSeachEngEveryNewTab);
  409.     if (r != checkSeachEngEveryNewTab / 2) return;
  410.     checkSearch(1);
  411.     checkSearch(2);
  412.     checkSearch(3);
  413.     checkSearch(4)
  414. }
  415.  
  416. function setFastestSearchEngine() {
  417.     var k = NTK.prefs.getIntPref("searchEng1");
  418.     var l = NTK.prefs.getIntPref("searchEng2");
  419.     var n = NTK.prefs.getIntPref("searchEng3");
  420.     var h = NTK.prefs.getIntPref("searchEng4");
  421.     var i = 1,
  422.         j;
  423.     if (k != -1) {
  424.         i = 1;
  425.         j = k
  426.     }
  427.     if (l != -1 && l < j) {
  428.         i = 2;
  429.         j = l
  430.     }
  431.     if (n != -1 && n < j) {
  432.         i = 3;
  433.         j = n
  434.     }
  435.     if (h != -1 && h < j) {
  436.         i = 4;
  437.         j = h
  438.     }
  439.     var m = i;
  440.     if (m == 1) {
  441.         m = ""
  442.     }
  443.     NTK.prefs.setCharPref("searchSite", "search" + m + ".newtabking.com")
  444. }
  445.  
  446. function checkSearch(h) {
  447.     NTK.prefs.setIntPref("searchEng" + h, -1);
  448.     gSearchStart[h] = new Date();
  449.     var g = new window.XMLHttpRequest();
  450.     var f = h;
  451.     if (h == 1) {
  452.         f = ""
  453.     }
  454.     var e = "http://search" + f + ".newtabking.com/?cx=" + adSenseChannel + "&cof=FORID:9&ie=utf-8&q=test123";
  455.     g.open("GET", e, true);
  456.     g.onreadystatechange = function (b) {
  457.         if (g.readyState == 4) {
  458.             if (g.status == 200) {
  459.                 var c = new Date();
  460.                 var a = c.getTime() - gSearchStart[h];
  461.                 NTK.prefs.setIntPref("searchEng" + h, a);
  462.                 setFastestSearchEngine();
  463.             }
  464.         }
  465.     };
  466.     g.send(null);
  467. }
  468.  
  469.  
  470.  
  471. function sidebarShow(b) {
  472.     var c = NTK.prefs.getBoolPref("sideboxShow");
  473.     c = !c;
  474.     NTK.prefs.setBoolPref("sideboxShow", c);
  475.     if (!c) {
  476.         NTK.prefs.setIntPref("sidebarHeight", document.getElementById("sidebox").clientHeight)
  477.     }
  478.     navHome()
  479. }
  480.  
  481. function sidebarShowOnLoad(n) {
  482.     var j = document.getElementById("sidebox");
  483.     var k = document.getElementById("sidebox-collapse");
  484.     var l = document.getElementById("box");
  485.     var m = document.getElementById("searchboxy");
  486.     var h = document.getElementById("box3wrapper");
  487.     var i = document.getElementById("botTbl");
  488.     var img = document.getElementById('sideboxImg');
  489.     if (n) {
  490.         j.style.display = "";
  491.         //k.style.display="none";
  492.         img.src = 'images/expand-right.png';
  493.         img.onClick = 'kaki();';
  494.         l.style.width = "600px";
  495.         m.style.width = "530px";
  496.         h.style.width = "630px";
  497.         i.style.width = "620px"
  498.     } else {
  499.         j.style.display = "none";
  500.         img.src = 'images/collapse-right.png';
  501.         img.onClick = 'pipi();';
  502.  
  503.         k.style.display = "block";
  504.         document.getElementById("sidebox-collapse").style.height = NTK.prefs.getIntPref("sidebarHeight") + "px";
  505.         l.style.width = "825px";
  506.         m.style.width = "755px";
  507.         h.style.width = "855px";
  508.         i.style.width = "845px"
  509.     }
  510.  
  511.     document.getElementById("sidebox-collapse").style.height = (document.getElementById("sidebox").clientHeight-20)+'px';    
  512.     NTK.prefs.setBoolPref("sideboxShow", n)
  513. }
  514.  
  515. function getGoogleSuggest(term) {
  516.     /*
  517.     var f="http://search.yahooapis.com/WebSearchService/V1/relatedSuggestion?appid=YahooDemo&query="+term;
  518.     var e = d.getElementsByTagName('Result');
  519.     key = e[i].childNodes[0].nodeValue;
  520.     */
  521.     if (term == '') return;
  522.     var f = "http://toolbarqueries.google.com/complete/search?output=toolbar&hl=en&q=" + term;
  523.     var g = new window.XMLHttpRequest();
  524.  
  525.     g.open("GET", f, true);
  526.  
  527.     g.onreadystatechange = function () {
  528.         if (g.readyState == 4) {
  529.             if (g.status == 200) {
  530.                 if (g.responseText != "") {
  531.                     var par = parser = new DOMParser();
  532.                     var d = parser.parseFromString(g.responseText, "text/xml");
  533.                     GRI2 = '';
  534.                     var e = d.getElementsByTagName('suggestion');
  535.                     var tar, key, maxSug = NTK.prefs.getIntPref('searchbarNumSuggestions');
  536.                     for (var i = 0; i < maxSug && i < e.length; i++) {
  537.                         key = e[i].getAttribute('data');
  538.                         tar = getSearchURL() + key;
  539.                         GRI2 += '<li onselect="' + tar + '" class="item"><img height="15px" src="images/magglass.png" style="vertical-align: top;"/><b> ' + key + '</b></li>';
  540.                     }
  541.                 }
  542.             }
  543.         }
  544.     }
  545.     g.send(null);
  546. }
  547.  
  548. function getFavicon(url) {
  549.     var x = getNSIURI(url);
  550.     return NTK.faviconService.getFaviconImageForPage(x);
  551. }
  552.  
  553. function getPlacesForDomain(o, p) {
  554.     var r, l, m, k, i, q, n;
  555.     r = new Array();
  556.     if (!NTK.historyService) {
  557.         return null
  558.     }
  559.     l = NTK.historyService.getNewQueryOptions();
  560.     m = NTK.historyService.getNewQuery();
  561.     if (o && (o > 0)) {
  562.         l.maxResults = o
  563.     }
  564.     l.sortingMode = 8;
  565.     m.onlyBookmarked = false;
  566.     m.domain = p;
  567.     k = NTK.historyService.executeQuery(m, l);
  568.     i = k.root;
  569.     i.containerOpen = true;
  570.     for (n = 0; n < i.childCount; n++) {
  571.         q = i.getChild(n);
  572.         r[n] = new Object();
  573.         if (q.title == "") {
  574.             r[n].title = q.uri
  575.         } else {
  576.             r[n].title = q.title
  577.         }
  578.         r[n].icon = getFavicon(q.uri); //q.icon;
  579.         r[n].uri = q.uri;
  580.         r[n].accessCount = q.accessCount
  581.     }
  582.     i.containerOpen = false;
  583.     return r
  584. }
  585.  
  586. function getHoursForDomain(A, D) {
  587.     var E, r, u, q, i, B, z, s = 30;
  588.     E = new Array();
  589.     if (!NTK.historyService) {
  590.         return null
  591.     }
  592.     r = NTK.historyService.getNewQueryOptions();
  593.     r.maxResults = A;
  594.     r.sortingMode = 8;
  595.     r.resultType = r.RESULTS_AS_VISIT;
  596.     options2 = NTK.historyService.getNewQueryOptions();
  597.     options2.maxResults = A;
  598.     options2.sortingMode = 8;
  599.     var t = new Array();
  600.     var x, y, C, v;
  601.     t[30] = 0;
  602.     t[31] = 0;
  603.     for (day = 0; day < s; day++) {
  604.         x = NTK.historyService.getNewQuery();
  605.         y = NTK.historyService.getNewQuery();
  606.         x.uri = getNSIURI(D);
  607.         x.hasUri = true;
  608.         y.hasDomain = true;
  609.         y.domain = getHostofUrl(D);
  610.         x.beginTimeReference = x.TIME_RELATIVE_TODAY;
  611.         x.beginTime = (-(day + 1) * 24) * 60 * 60 * 1000000;
  612.         x.endTimeReference = x.TIME_RELATIVE_TODAY;
  613.         x.endTime = (-(day) * 24) * 60 * 60 * 1000000;
  614.         if (day == 0) {
  615.             x.endTime = 0
  616.         }
  617.         x.onlyBookmarked = false;
  618.         y.beginTimeReference = y.TIME_RELATIVE_TODAY;
  619.         y.beginTime = (-(day + 1) * 24) * 60 * 60 * 1000000;
  620.         y.endTimeReference = y.TIME_RELATIVE_TODAY;
  621.         y.endTime = (-(day) * 24) * 60 * 60 * 1000000;
  622.         if (day == 0) {
  623.             y.endTime = 0
  624.         }
  625.         y.onlyBookmarked = false;
  626.         q = NTK.historyService.executeQuery(x, r);
  627.         C = NTK.historyService.executeQuery(x, options2);
  628.         i = q.root;
  629.         i.containerOpen = true;
  630.         v = C.root;
  631.         v.containerOpen = true;
  632.         t[day] = 0;
  633.         for (z = 0; z < 100 && z < i.childCount; z++) {
  634.             B = i.getChild(z);
  635.             t[day] += B.accessCount;
  636.             t[31] += B.accessCount
  637.         }
  638.         t[day] = i.childCount + v.childCount;
  639.         t[30] += t[day];
  640.         i.containerOpen = false
  641.     }
  642.     return t
  643. }
  644.  
  645. function getPlaces(B, E, i) {
  646.     var G, e, C, z, F, x, s, t, D, v, A, u;
  647.     u = NTK.prefs.getIntPref("viewTime");
  648.     G = new Array();
  649.     if (!NTK.historyService) {
  650.         return null
  651.     }
  652.     e = NTK.historyService.getNewQueryOptions();
  653.     if (B && (B > 0)) {
  654.         e.maxResults = B
  655.     }
  656.     if (E) {
  657.         e.sortingMode = 8
  658.     }
  659.     C = new Array();
  660.     try {
  661.         z = NTK.prefs.getIntPref("timezone")
  662.     }
  663.     catch(y) {
  664.         z = 0;
  665.         NTK.prefs.setIntPref("timezone", 0)
  666.     }
  667.     switch (z) {
  668.     case 1:
  669.         F = 6;
  670.         x = 12;
  671.         break;
  672.     case 2:
  673.         F = 12;
  674.         x = 17;
  675.         break;
  676.     case 3:
  677.         F = 17;
  678.         x = 21;
  679.         break;
  680.     case 4:
  681.         F = -3;
  682.         x = 6;
  683.         break
  684.     }
  685.     if (z > 0) {
  686.         for (v = 0; v < u; v++) {
  687.             C[v] = NTK.historyService.getNewQuery();
  688.             C[v].beginTimeReference = C[v].TIME_RELATIVE_TODAY;
  689.             C[v].beginTime = (-(v + 1) * 24 + F) * 60 * 60 * 1000000;
  690.             C[v].endTimeReference = C[v].TIME_RELATIVE_TODAY;
  691.             C[v].endTime = (-(v + 1) * 24 + x) * 60 * 60 * 1000000;
  692.             C[v].onlyBookmarked = i
  693.         }
  694.     } else {
  695.         C[0] = NTK.historyService.getNewQuery();
  696.         C[0].onlyBookmarked = i;
  697.         C[0].beginTimeReference = C[0].TIME_RELATIVE_NOW;
  698.         C[0].beginTime = -u * 24 * 60 * 60 * 1000000;
  699.         C[0].hasEndTime = false
  700.     }
  701.     s = NTK.historyService.executeQueries(C, C.length, e);
  702.     t = s.root;
  703.     t.containerOpen = true;
  704.  
  705.     if (brothersoft) {
  706.         G[0] = new Object();
  707.         G[0].title = "Brothersoft";
  708.         G[0].icon = "images/df.png";
  709.         G[0].uri = "http://www.brothersoft.com";
  710.         G[0].accessCount = Math.ceil(999 * (u / 120));
  711.         A = 1;
  712.     } else {
  713.         A = 0;
  714.     }
  715.  
  716.     for (A = A; A < t.childCount; A++) {
  717.         D = t.getChild(A);
  718.         G[A] = new Object();
  719.         G[A].title = D.title;
  720.         G[A].icon = getFavicon(D.uri); //D.icon;
  721.         G[A].uri = D.uri;
  722.         G[A].accessCount = Math.ceil(D.accessCount * (u / 120));
  723.         G[A].time = D.time
  724.     }
  725.     t.containerOpen = false;
  726.     return G
  727. }
  728.  
  729. function showViewMode(h) {
  730.     for (var e = 0; e < 3; e++) {
  731.         if (e == h) {
  732.             document.getElementById("timezone" + e).className = "timezoneSelected"
  733.         } else {
  734.             document.getElementById("timezone" + e).className = "timezone"
  735.         }
  736.     }
  737.     var i = false;
  738.     try {
  739.         i = NTK.prefs.getBoolPref("thumbsDone")
  740.     } catch(j) {}
  741.     var d;
  742.     if (i) {
  743.         d = ""
  744.     } else {
  745.         d = "none"
  746.     }
  747.     document.getElementById("timezone1").style.display = d
  748. }
  749. function showTimeMain(d, e) {
  750.     var f = document.getElementById("timeview0");
  751.     if (d == 120) {
  752.         f.className = "timezoneSelected"
  753.     } else {
  754.         f.className = "timezone"
  755.     }
  756.     f = document.getElementById("timeview1");
  757.     if (d == 30) {
  758.         f.className = "timezoneSelected"
  759.     } else {
  760.         f.className = "timezone"
  761.     }
  762.     f = document.getElementById("timeview2");
  763.     if (d == 7) {
  764.         f.className = "timezoneSelected"
  765.     } else {
  766.         f.className = "timezone"
  767.     }
  768.     if (e) {
  769.         document.getElementById("mainContent").innerHTML = getMainContent()
  770.     }
  771. }
  772. function showTime(b) {
  773.     NTK.prefs.setIntPref("analyticsYear", 1972);
  774.     NTK.prefs.setIntPref("viewTime", b);
  775.     navHome()
  776. }
  777. function showView(b) {
  778.     NTK.prefs.setIntPref("viewMode", b);
  779.     navHome()
  780. }
  781. function writeCell(b) {
  782.     write("<td>");
  783.     write(b);
  784.     write("</td>")
  785. }
  786.  
  787. function createImage(b) {
  788.     if (brothersoft && b == null) {
  789.         b = 'http://www.brothersoft.com/favicon.ico';
  790.     }
  791.     return '<img class="aM" src="' + b + '" />';
  792. }
  793.  
  794. function createDrilldown(f, e) {
  795.     var h, g;
  796.     h = new Uri(f);
  797.     g = " onclick=\"gD('" + h.getHost() + "'," + e + ')" ';
  798.     var str = getRes("Details");
  799.     return "<a  " + g + ' title="' + h.getHost() + ' '+str+' rel="type:element" class="ren mb" >'+str+'</a>'
  800. }
  801.  
  802. function createLink(n, v, l, o, m, q, r, u) {
  803.     var s, p;
  804.     if (n.substr(0, 6) == "index.") {
  805.         n = v
  806.     }
  807.     if (n.substr(0, 9) == "login.php") {
  808.         n = v
  809.     }
  810.     s = n.substr(0, l);
  811.     if (s != n) {
  812.         s = s + "..."
  813.     }
  814.     p = '<b><a href="' + v + '" '
  815.     /*onclick="nav(\''+v+'\')*/
  816.     + '" title="' + v + '" ';
  817.     if (r) {
  818.         p += ' target="_new" '
  819.     }
  820.     p += ' class="aI">';
  821.     if (o) {
  822.         p += createImage(o.spec)
  823.     } else {
  824.         p += '<img border=0 class="aL" src="images/df.png" />'
  825.     }
  826.     var t = "aUtBl('" + v + "'," + q + ")";
  827.     p += ' <span class="mL" id="r_' + q + '">' + s + "</span></a> ";
  828.     if (u) {
  829.         var str = getRes("RenameTooltips");
  830.         var str2 = getRes("Edit");
  831.         var str3 = getRes("RemoveTooltips");
  832.         var str4 = getRes("Remove");
  833.         p += '<span id="e_' + q + '" style="display:none;position:absolute;top:6px;right:75px;text-align:right">' + createDrilldown(v, q) + ' <a class="ren"  onclick="edit(' + q + ')" title="'+str+'" >'+str2+'</a> <a class="ren"  onclick="' + t + '"  title="'+str3+'" >'+str4+'</a></span>'        
  834.     }
  835.     p += "</b>";
  836.     return p
  837. }
  838. function edit(d) {
  839.     if (!changing) {
  840.         var c = document.getElementById("r_" + d);
  841.         c.innerHTML = '<input id="' + c.id + '_field" size="45" maxlength="254" type="text" value="' + c.innerHTML + '" onkeypress="return titleEnter(this,event,\'' + c.id + '\')" onfocus="highLight(this);" onblur="noLight(this); return titleBlur(this,\'' + c.id + "');\" />";
  842.         changing = true
  843.     }
  844.     c.firstChild.focus();
  845.     return true
  846. }
  847. function rebuildAfterTimeout() {
  848.     rebuildPage(getMainContent())
  849. }
  850. function write(b) {
  851.     document.write(b)
  852. }
  853. function writeHeader(d, c) {
  854.     if (!c) {
  855.         c = 1
  856.     }
  857.     write("<h" + c + ">" + d + "</h" + c + ">")
  858. }
  859. function printPlaces(f, h) {
  860.     var g, i, j;
  861.     g = '<table style="padding-left:10px">';
  862.     for (j = 0; j < (f.length) - 1; j++) {
  863.         if (f[j] == null) {
  864.             break
  865.         }
  866.         i = f[j].icon;
  867.         g = g + ('<tr class="popCell"><td> ');
  868.         g = g + ('<span class="thumbTitle">');
  869.         g = g + (createLink(f[j].title, f[j].uri, 20, i, true, 0, h, true));
  870.         g = g + ("</span></td>");
  871.         g = g + ("</tr>")
  872.     }
  873.     g = g + ("</table>");
  874.     return g
  875. }
  876. function getMaxAccessCount(e) {
  877.     if (!e || !e.length) {
  878.         return null
  879.     }
  880.     totalAccessCount = 0;
  881.     var f, d;
  882.     try    {        d = e[0].accessCount;    } catch (e) { return null;    }
  883.     for (f = 1; f < e.length; f++) {
  884.         if (e[f] == null) {
  885.             break
  886.         }
  887.         totalAccessCount = totalAccessCount + e[f].accessCount;
  888.         if (e[f].accessCount > d) {
  889.             d = e[f].accessCount
  890.         }
  891.     }
  892.     return d
  893. }
  894. function sortTitle(a, b) {
  895.     a = a.title.toLowerCase();
  896.     b = b.title.toLowerCase();
  897.     if (a > b) {
  898.         return 1
  899.     }
  900.     if (a < b) {
  901.         return -1
  902.     }
  903.     return 0
  904. }
  905. function sortVisit(a, b) {
  906.     return b.accessCount - a.accessCount
  907. }
  908. function sortTime(a, b) {
  909.     return b.time - a.time
  910. }
  911. function getPlacesDrillAsCharts(i, h, j) {
  912.     var k, l, g;
  913.     h.sort(sortVisit);
  914.     l = getMaxAccessCount(h);
  915.     if (!l) {}
  916.     k = ('<div style="padding:10px"><div class="section">');
  917.     k += ('<ul class="chartlist" style="width:100%">');
  918.     for (g = 0; g < h.length; g++) {
  919.         if (h[g] == null) {
  920.             break
  921.         }
  922.         k += ('<li id="row_' + g + '">');
  923.         k += (createLink(h[g].title, h[g].uri, 47, h[g].icon, false, 0, j, true));
  924.         var str = getRes("Visits");
  925.         k += ('<span class="count">' + h[g].accessCount + " "+str+"</span>");
  926.         k += ('<span class="index" style="width: ' + Math.round(h[g].accessCount * 94 / l) + '%">(' + h[g].accessCount + "%)</span>");
  927.         k += ("</li>")
  928.     }
  929.     k += ("</ul>");
  930.     k += ("</div></div>");
  931.     return k
  932. }
  933. function getPlacesAsCharts(j, m) {
  934.     var o, p, n, k, i, l;
  935.     k = NTK.prefs.getIntPref("maxMostUsedSites");
  936.     j.length = k;
  937.     p = getMaxAccessCount(j);
  938.     if (!p) {}
  939.     o = ('<div class="section">');
  940.     o += ('<ul class="chartlist" style="width:100%">');
  941.     n = 100;
  942.     for (i = 0; i < j.length && i < k && j[i] != null; i++) {
  943.         o += ('<li id="row_' + i + '" onmouseout="sDi(' + i + ',0)" onmouseover="sDi(' + i + ',1)">');
  944.         o += createLink(j[i].title, j[i].uri, 47, j[i].icon, true, i, m, true);
  945.         var str = getRes("VisitsCap");
  946.         o += ('<span class="count">'+str+': ' + j[i].accessCount + " </span>");
  947.         o += ('<span class="num" >' + (i + 1) + "</span>");
  948.         o += ('<span class="index" style="width: ' + Math.round(j[i].accessCount * 94 / p) + '%">(' + j[i].accessCount + "%)</span>");
  949.         o += ("</li>")
  950.     }
  951.     numMostUsedSites = i;
  952.     o += ("</ul>");
  953.     o += ("</div>");
  954.     return o
  955. }
  956. function sDi(b, c) {
  957.     var a = document.getElementById("e_" + b);
  958.     if (c == 1) {
  959.         a.style.display = ""
  960.     } else {
  961.         a.style.display = "none"
  962.     }
  963. }
  964. function getNSIURI(d) {
  965.     var c = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURI);
  966.     c.spec = d;
  967.     return c
  968. }
  969. function getHostofUrl(b) {
  970.     return getNSIURI(b).host
  971. }
  972. function calcPlacesAsAnalytics() {
  973.     var j, f, i, h;
  974.     j = [removeDuplicatesFilter, fixEmptyTitlesFilter, removeWWWFromTitles, filterBlackList];
  975.     f = false;
  976.     i = getPlaces(10 * NTK.prefs.getIntPref("maxMostUsedSites"), true, f);
  977.     i = filterPlaces(i, j);
  978.     i.sort(sortVisit);
  979.     var g = calcPlacesAsAnalytics2(i, getmostUsedinNewTab());
  980.     h = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
  981.     h.data = g;
  982.     NTK.prefs.setComplexValue("ntkAnalytics", Components.interfaces.nsISupportsString, h)
  983. }
  984. function getPlacesAsAnalytics() {
  985.     var o = ('<div class="section"><table cellspacing="10" cellpadding="2" class=speed style="width:100%">');
  986.     try {
  987.         var p = NTK.prefs.getComplexValue("ntkAnalytics", Components.interfaces.nsISupportsString).data
  988.     } catch(j) {
  989.         window.setTimeout("calcPlacesAsAnalytics()", 3333);
  990.         var str = getRes("PleaseWaitAnalytics");
  991.         return o + '<tr><td style="font-size:xx-small;color:#aaa">'+str+'</td></tr></table></div>'
  992.     }
  993.     var e = NTK.prefs.getBoolPref("sideboxShow");
  994.     var s, v, t;
  995.     if (e) {
  996.         s = 3
  997.     } else {
  998.         s = 4
  999.     }
  1000.     var u;
  1001.     var q, i = false;
  1002.     for (var r = 0; ! i && r < 4; r++) {
  1003.         o += "<tr>";
  1004.         for (q = 0; q < s; q++) {
  1005.             v = r * s + q;
  1006.             try {
  1007.                 u = NTK.prefs.getComplexValue("ntkAnalytics-" + v, Components.interfaces.nsISupportsString).data
  1008.             } catch(j) {}
  1009.             o += u
  1010.         }
  1011.         o += "</tr>"
  1012.     }
  1013.     o += "</table></div>";
  1014.     return o
  1015. }
  1016. function calcPlacesAsAnalytics2(B, C) {
  1017.     var D = "",
  1018.         z, G, H = 16,
  1019.         E = 4,
  1020.         N = 4,
  1021.         j, K;
  1022.     var O = NTK.prefs.getBoolPref("sideboxShow");
  1023.     B.length = H;
  1024.     z = getMaxAccessCount(B);
  1025.     var x;
  1026.     G = 100;
  1027.     var I, i;
  1028.     var A;
  1029.     var L = new Array();
  1030.     var J = new Array();
  1031.     for (I = 0; I < H / N; I++) {
  1032.         for (j = 0; j < N; j++) {
  1033.             i = I * N + j;
  1034.             L[i] = 0;
  1035.             J[i] = getHoursForDomain(300, B[i].uri);
  1036.             for (var F = 0; F < (J[i].length - 1); F++) {
  1037.                 if (J[i][F] > L[i]) {
  1038.                     L[i] = J[i][F]
  1039.                 }
  1040.             }
  1041.         }
  1042.     }
  1043.     for (I = 0; I < H / N; I++) {
  1044.         for (j = 0; j < N; j++) {
  1045.             i = I * N + j;
  1046.             D = '<td id="row_' + i + '"';
  1047.             if (O) {
  1048.                 D += " height=130 "
  1049.             } else {
  1050.                 D += " height=160 "
  1051.             }
  1052.             D += "valign=top width=33%>";
  1053.             A = flattedURL(B[i].uri);
  1054.             D += "<div onclick=\"nav('" + B[i].uri + '\')" class="lgThumb">';
  1055.             D += '<div class="rDiv thumbUr" >' + createLink(B[i].title, B[i].uri, 27, B[i].icon, true, i, C, false) + "</div>";
  1056.             D += "<a title=" + B[i].uri + " href=" + B[i].uri + ">";
  1057.             D += '<div class="rTop">';
  1058.             for (var y = 0; y < 30; y++) {
  1059.                 var M = Math.floor(10 * J[i][y] / (0.1 * L[i]));
  1060.                 if (J[i][y] > 0 && M <= 0) {
  1061.                     M = 1
  1062.                 }
  1063.                 if (M > 10) {
  1064.                     M = 10
  1065.                 }
  1066.                 var str = getRes("Visits");
  1067.                 D += '<img title="' + J[i][y] + ' '+str+'" src="images/r_' + M + '.png" class="rS"/>'
  1068.             }
  1069.             D += "</div></a>";
  1070.             D += '<div class="rTo"><table width=100%><tr><td>' + getDayStr(30) + "</td><td align=right>" + getDayStr(0) + "</td></tr>";
  1071.             var str = getRes("VisitsInTheLast30Days");
  1072.             D += "<tr><td colspan=2>"+str+": <b>" + J[i][30] + "</b>";
  1073.             D += "</td></tr></table></div>";
  1074.             var str = getRes("Rank");
  1075.             D += '<div class="rBtm">'+str+' #' + (1 + i) + "</div>";
  1076.             D += "</div>";
  1077.             D += "</td>";
  1078.             x = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
  1079.             x.data = D;
  1080.             NTK.prefs.setComplexValue("ntkAnalytics-" + i, Components.interfaces.nsISupportsString, x)
  1081.         }
  1082.     }
  1083.     numMostUsedSites = 9;
  1084.     return D
  1085. }
  1086. function getDayStr(f) {
  1087.     var s1 = getRes("Jan");
  1088.     var s2 = getRes("Feb");
  1089.     var s3 = getRes("Mar");
  1090.     var s4 = getRes("Apr");            
  1091.     var s5 = getRes("May");
  1092.     var s6 = getRes("Jun");
  1093.     var s7 = getRes("Jul");
  1094.     var s8 = getRes("Aug");            
  1095.     var s9 = getRes("Sep");
  1096.     var s10 = getRes("Oct");
  1097.     var s11 = getRes("Nov");
  1098.     var s12 = getRes("Dec");            
  1099.     var d = new Array(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12);
  1100.     var e = new Date();
  1101.     e.setDate(e.getDate() - f);
  1102.     return (d[e.getMonth()] + ". " + e.getDate())
  1103. }
  1104.  
  1105. function getPlacesAsSpeeddial(C, u) {
  1106.     var t, A, r, B = 12,
  1107.         i = 4,
  1108.         y = 3,
  1109.         v, x;
  1110.     var p = NTK.prefs.getBoolPref("sideboxShow");
  1111.     if (!p) {
  1112.         B = 16;
  1113.         i = 4;
  1114.         var y = 4
  1115.     }
  1116.     C.length = B;
  1117.     A = getMaxAccessCount(C);
  1118.     if (!A) {}
  1119.     t = ('<div class="section"><table cellspacing="10" cellpadding="2" class=speed style="width:100%">');
  1120.     r = 100;
  1121.     var q, z;
  1122.     var s;
  1123.     for (q = 0; q < B / y; q++) {
  1124.         t += "<tr>";
  1125.         for (v = 0; v < y; v++) {
  1126.             z = q * y + v;
  1127.             t += "<td  ";
  1128.             if (p) {
  1129.                 t += " height=130 "
  1130.             } else {
  1131.                 t += " height=160 "
  1132.             }
  1133.             t += 'valign=top width=33%  id="row_' + z + '">';
  1134.             s = flattedURL(C[z].uri);
  1135. //            t += "<div onclick=\"nav('" + C[z].uri + '\')" class="lgThumb">';
  1136.             t += '<div class="lgThumb">';
  1137.             t += "<div class=thumbUr>" + createLink(C[z].title, C[z].uri, 27, C[z].icon, true, z, u, false) + "</div>";
  1138.  
  1139.             t += "<a onclick=\"nav('" + C[z].uri + "')\" href=\""+C[z].uri+"\" title=\""+C[z].title+"\"";
  1140.             if (u) { p += ' target="_new" ' }
  1141.             t += '>';
  1142.             t += '<img   border=0 src="thumbnails/' + s + '.png" ';
  1143.             t += "  /></a>";
  1144.             t += "</div>";
  1145.             t += "</td>"
  1146.         }
  1147.         t += "</tr>"
  1148.     }
  1149.     numMostUsedSites = 9;
  1150.     t += ("</table");
  1151.     t += ("</div>");
  1152.     return t
  1153. }
  1154.  
  1155. function flattedURL(h) {
  1156.     h = h.substring(0, thumbnailMaxChars);
  1157.     var g = h.indexOf("://");
  1158.     var e = h.substr(0, g + 3);
  1159.     var f = h.replace(e, "");
  1160.     
  1161.     f =  f.replace(/[^a-zA-Z 0-9]+/g,'');
  1162.  
  1163. //    f = f.replace(/\%/g, "");
  1164. //    f = f.replace(/\&/g, "");
  1165. //    f = f.replace(/\*/g, "");
  1166. //    f = f.replace(/\?/g, "");
  1167. //    f = f.replace(/\[/g, "");
  1168. //    f = f.replace(/\]/g, "");
  1169. //    f = f.replace(/\</g, "");
  1170. //    f = f.replace(/\>/g, "");
  1171. //    f = f.replace(/\=/g, "");
  1172. //    f = f.replace(/\+/g, "");
  1173. //    f = f.replace(/\'/g, "");
  1174. //    f = f.replace(/\"/g, "");
  1175. //    f = f.replace(/\\/g, "");
  1176. //    f = f.replace(/\//g, "");
  1177. //    f = f.replace(/\,/g, "");
  1178. //    f = f.replace(/\./g, "");
  1179. //    f = f.replace(/\:/g, "");
  1180. //    f = f.replace(/\;/g, "");
  1181. //    f = f.replace(/\#/g, "");
  1182. //    f = f.replace(/ /g, "");
  1183.     
  1184.     return f
  1185. }
  1186. function getmostUsedinNewTab() {
  1187.     var d = false;
  1188.     try {
  1189.         d = NTK.prefs.getBoolPref("mostUsedinNewTab-pref")
  1190.     } catch(c) {}
  1191.     return d
  1192. }
  1193. function clone(f) {
  1194.     if (f == null || typeof(f) != "object") {
  1195.         return f
  1196.     }
  1197.     var e = new f.constructor();
  1198.     for (var d in f) {
  1199.         e[d] = clone(f[d])
  1200.     }
  1201.     return e
  1202. }
  1203. function Uri() {
  1204.     this._uri = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURI)
  1205. }
  1206. function Uri(c) {
  1207.     if (!c) {
  1208.         throw "uri is null or empty"
  1209.     }
  1210.     this._uri = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURI);
  1211.     try {
  1212.         this._uri.spec = c
  1213.     } catch(d) {}
  1214. }
  1215. Uri.prototype.getHost = function () {
  1216.     return this._uri.host
  1217. };
  1218. Uri.prototype.getSpec = function () {
  1219.     return this._uri.spec
  1220. };
  1221. Uri.prototype.getPath = function () {
  1222.     return this._uri.path
  1223. };
  1224.  
  1225. function List(b) {
  1226.     if (!b) {
  1227.         this._comparator = null
  1228.     } else {
  1229.         this._comparator = b
  1230.     }
  1231.     this._items = new Array()
  1232. }
  1233. List.prototype.getLength = function () {
  1234.     return this._items.length
  1235. };
  1236. List.prototype.getArray = function () {
  1237.     return this._items
  1238. };
  1239. List.prototype.getItem = function (b) {
  1240.     if (b < 0 || b > (this.getLength - 1)) {
  1241.         throw "index out of bounds"
  1242.     }
  1243.     return this._items[b]
  1244. };
  1245. List.prototype.add = function (b) {
  1246.     this._items[this.getLength()] = b
  1247. };
  1248. List.prototype.pop = function () {
  1249.     if (this.getLength()) {
  1250.         return null
  1251.     }
  1252.     var b = this._items[0];
  1253.     this._items.splice(0, 1);
  1254.     return b
  1255. };
  1256. List.prototype.toString = function () {
  1257.     if (0 == this.getLength()) {
  1258.         return "[ ]"
  1259.     }
  1260.     var c, d;
  1261.     c = "[ " + this._items[0];
  1262.     for (d = 1; d < this.getLength(); d++) {
  1263.         c += ", " + this._items[d]
  1264.     }
  1265.     c += " ]";
  1266.     return c
  1267. };
  1268. List.prototype.contains = function (c) {
  1269.     for (var d = 0; d < this.getLength(); d++) {
  1270.         if (!this._comparator) {
  1271.             if (this._items[d] == c) {
  1272.                 return true
  1273.             }
  1274.         } else {
  1275.             if (this._comparator(this._items[d], c)) {
  1276.                 return true
  1277.             }
  1278.         }
  1279.     }
  1280.     return false
  1281. };
  1282.  
  1283. function printObject(f, e) {
  1284.     var h = "";
  1285.     for (var g in e) {
  1286.         h += (f + "." + g + "=" + e[g] + "\n")
  1287.     }
  1288.     alert(h)
  1289. }
  1290.  
  1291.  
  1292. function fixEmptyTitle(b) {
  1293.     if (!b.title) {
  1294.         b.title = b.uri
  1295.     }
  1296.     return b
  1297. }
  1298.  
  1299. function removeWWWFromTitle(e) {
  1300.     try {
  1301.         var d = new Uri(e.title);
  1302.         if (d.getHost().substring(0, 4) == "www.") {
  1303.             e.title = d.getHost().substring(4)
  1304.         }
  1305.     } catch(f) {}
  1306.     return e
  1307. }
  1308. function filterByOperator(h, f) {
  1309.     var g, e = new List();
  1310.     for (g = 0; g < h.length; g++) {
  1311.         e.add(f(h[g]))
  1312.     }
  1313.     return e.getArray()
  1314. }
  1315. function filterByPredicate(h, f) {
  1316.     var g, e = new List();
  1317.     for (g = 0; g < h.length; g++) {
  1318.         if (f(h[g])) {
  1319.             e.add(h[g])
  1320.         }
  1321.     }
  1322.     return e.getArray()
  1323. }
  1324. function fixEmptyTitlesFilter(b) {
  1325.     return filterByOperator(b, fixEmptyTitle)
  1326. }
  1327. function removeWWWFromTitles(b) {
  1328.     return filterByOperator(b, removeWWWFromTitle)
  1329. }
  1330. function removeDuplicatesHelper(f) {
  1331.     var g, i, h, j;
  1332.     g = f.getItem(0);
  1333.     i = new Uri(g.uri);
  1334.     if (i.getPath().length == 0) {
  1335.         return g
  1336.     }
  1337.     for (j = 1; j < f.getLength(); j++) {
  1338.         h = new Uri(f.getItem(j).uri);
  1339.         if (f.getItem(j).accessCount > g.accessCount) {
  1340.             g = f.getItem(j);
  1341.             i = new Uri(g.uri)
  1342.         }
  1343.     }
  1344.     return g
  1345. }
  1346. function removeDuplicatesFilter(n) {
  1347.     var h, l, j, m;
  1348.     h = new List;
  1349.     l = {};
  1350.     for (m = 0; m < n.length; m++) {
  1351.         j = new Uri(n[m].uri);
  1352.         if (!l[j.getHost().toLowerCase()]) {
  1353.             l[j.getHost().toLowerCase()] = new List()
  1354.         }
  1355.         l[j.getHost().toLowerCase()].add(n[m])
  1356.     }
  1357.     for (var k in l) {
  1358.         var i = removeDuplicatesHelper(l[k]);
  1359.         if (!i) {
  1360.             alert("bububu")
  1361.         }
  1362.         h.add(i)
  1363.     }
  1364.     return h.getArray()
  1365. }
  1366. function filterPlaces(e, f) {
  1367.     for (var d = 0; d < f.length; d++) {
  1368.         e = f[d](e)
  1369.     }
  1370.     return e
  1371. }
  1372. function getBlackList() {
  1373.     try {
  1374.         var d = NTK.prefs.getCharPref("blacklist")
  1375.     } catch(c) {
  1376.         return []
  1377.     }
  1378.     if (!d) {
  1379.         return []
  1380.     }
  1381.     return d.split(";")
  1382. }
  1383. function isInPlaces(i, g) {
  1384.     var j, h, f;
  1385.     j = new Uri(i);
  1386.     for (f = 0; f < g.length; f++) {
  1387.         h = new Uri(g[f]);
  1388.         if (j.getHost().toLowerCase() == h.getHost().toLowerCase()) {
  1389.             return true
  1390.         }
  1391.     }
  1392.     return false
  1393. }
  1394. function filterBlackList(i) {
  1395.     var j, f, g, h;
  1396.     j = new Array();
  1397.     f = 0;
  1398.     g = getBlackList();
  1399.     for (h = 0; h < i.length; h++) {
  1400.         if (!isInPlaces(i[h].uri, g)) {
  1401.             j[f] = i[h];
  1402.             f++
  1403.         }
  1404.     }
  1405.     return j
  1406. }
  1407. function aUtBl(i, h) {
  1408.     var str = getRes("ConfirmRemoving");       
  1409.     answer = confirm(str + " :" + i);
  1410.     if (answer == 0) {
  1411.         return
  1412.     }
  1413.     var f, g;
  1414.     f = document.getElementById("row_" + h);
  1415.     if (f != null) {
  1416.         f.style.display = "none"
  1417.     }
  1418.     numMostUsedSites = numMostUsedSites - 1;
  1419.     document.getElementById("box3").style.height = NTK.box3Const + (numMostUsedSites) * NTK.box3ConstBarConst + "px";
  1420.     try {
  1421.         g = NTK.prefs.getCharPref("blacklist")
  1422.     } catch(j) {
  1423.         g = ""
  1424.     }
  1425.     if (!g) {
  1426.         g = i
  1427.     } else {
  1428.         g += ";" + i
  1429.     }
  1430.     try {
  1431.         NTK.prefs.setCharPref("blacklist", g)
  1432.     } catch(j) {
  1433.         printObject("ex", j)
  1434.     }
  1435.     rebuildPage()
  1436. }
  1437. function gD(j, f) {
  1438.     var i, g, h;
  1439.     i = getPlacesForDomain(99, j);
  1440.     g = getPlacesDrillAsCharts(j, i, getmostUsedinNewTab());
  1441.     document.getElementById("drilldown").innerHTML = g;
  1442.     h = i.length;
  1443.     document.getElementById("drilldown").style.height = 45 + (h) * NTK.box3ConstBarConst + "px";
  1444.     window.Lightbox.open({
  1445.         content: g,
  1446.         player: "html",
  1447.         title: j,
  1448.         height: 450,
  1449.         width: 600
  1450.     });
  1451.     return true
  1452. }
  1453. function getMainContent() {
  1454.     var c;
  1455.     c = generateContent();
  1456.     var d = NTK.prefs.getIntPref("viewMode");
  1457.     if (numMostUsedSites < 3) {
  1458.         document.getElementById("box3").style.height = "100px"
  1459.     }
  1460.     if (d == 0) {
  1461.         document.getElementById("box3").style.height = NTK.box3Const + (numMostUsedSites) * NTK.box3ConstBarConst + "px"
  1462.     }
  1463.     return (c)
  1464. }
  1465.  
  1466. function printUserfullApps()    {
  1467.    if (NTK.prefs.getBoolPref("shortcuts-pref") && Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS == "WINNT") {
  1468.         document.getElementById("usefulAppsStub").innerHTML = getUsefulApps2();
  1469.     } 
  1470. }
  1471. function printMainContent() {
  1472.     var d = getMainContent();
  1473.     var e = true;
  1474.     document.write(d);
  1475.     
  1476.     rebuildPage(d);
  1477.     try {
  1478.         e = NTK.prefs.getBoolPref("suggested-pref")
  1479.     } catch(f) {}
  1480.     if (e) {
  1481.         window.setTimeout("downloadRelated(true)", 5555)
  1482.     }
  1483. }
  1484. function generateContent() {
  1485.     var B, x, E, s;
  1486.     var C = NTK.prefs.getIntPref("maxMostUsedSites");
  1487.     B = [removeDuplicatesFilter, fixEmptyTitlesFilter, removeWWWFromTitles, filterBlackList];
  1488.     x = NTK.prefs.getBoolPref("bookmarksOnly");
  1489.     E = getPlaces(10 * C, true, x);
  1490.     E = filterPlaces(E, B);
  1491.     E.sort(sortVisit);
  1492.     numMostUsedSites = E.length;
  1493.     var u = "";
  1494.     for (var A = 0; A < 16 && E[A] != null; A++) {
  1495.         if (u != "") {
  1496.             u += ";"
  1497.         }
  1498.         u += (E[A].uri).substr(0, thumbnailMaxChars)
  1499.     }
  1500.     for (A = 0; A < E.length && A < C; A++) {
  1501.         if (E[A] == null) {
  1502.             break
  1503.         }
  1504.         if (NTK.personalAccessStats != "") {
  1505.             NTK.personalAccessStats += ";"
  1506.         }
  1507.         NTK.personalAccessStats += E[A].uri + "::" + E[A].accessCount
  1508.     }
  1509.     NTK.prefs.setCharPref("thumbsUrls", u);
  1510.     var y = 0;
  1511.     try {
  1512.         y = NTK.prefs.getIntPref("viewMode")
  1513.     } catch(v) {}
  1514.     var D = new Date();
  1515.     var i = new Date();
  1516.     var t = false;
  1517.     try {
  1518.         var e = NTK.prefs.getIntPref("analyticsYear");
  1519.         var z = NTK.prefs.getIntPref("analyticsMonth");
  1520.         var r = NTK.prefs.getIntPref("analyticsDay");
  1521.         i.setFullYear(e, z, r);
  1522.         t = true
  1523.     } catch(v) {}
  1524.     if (!t || D - i > 1000000 * 60 * 60 * 24) {
  1525.         window.setTimeout("calcPlacesAsAnalytics()", 3333);
  1526.         NTK.prefs.setIntPref("analyticsYear", D.getFullYear());
  1527.         NTK.prefs.setIntPref("analyticsMonth", D.getMonth());
  1528.         NTK.prefs.setIntPref("analyticsDay", D.getDate())
  1529.     }
  1530.     if (y == 0) {
  1531.         html = getPlacesAsCharts(E, getmostUsedinNewTab())
  1532.     }
  1533.     if (y == 1) {
  1534.         html = getPlacesAsSpeeddial(E, getmostUsedinNewTab())
  1535.     }
  1536.     if (y == 2) {
  1537.         html = getPlacesAsAnalytics()
  1538.     }
  1539.     s = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
  1540.     s.data = html;
  1541.     return html
  1542. }
  1543. function getSearchForm(i) {
  1544.     var j = false;
  1545.     try {
  1546.         j = NTK.prefs.getBoolPref("ntkfocus-pref")
  1547.     } catch(k) {
  1548.         NTK.prefs.setBoolPref("ntkfocus-pref", false)
  1549.     }
  1550.     var h = 3;
  1551.     try {
  1552.         h = NTK.prefs.getIntPref("ntksearchEngine-pref")
  1553.     } catch(k) {
  1554.         NTK.prefs.setIntPref("ntksearchEngine-pref", 3)
  1555.     }
  1556.     var e = '<form id="searchbox2" onsubmit="return validateSearch()" autocomplete="off"  style="padding:0px 10px 0px 10px" ';
  1557.     var l = '<div class="sw_b0"><div class="sw_b1"><div class="sw_b2">';
  1558.     switch (h) {
  1559.     case 0:
  1560.         e += ' action="http://www.ask.com/web" >' + l;
  1561.         e += '<input name="q" ';
  1562.         break;
  1563.     case 1:
  1564.         e += ' action="http://www.bing.com/search" >' + l;
  1565.         e += '<input name="q" ';
  1566.         break;
  1567.     case 2:
  1568.         e += ' action="http://www.google.com/search" >' + l;
  1569.         e += '<input name="q" ';
  1570.         break;
  1571.     case 4:
  1572.         e += ' action="http://en.wikipedia.org/wiki/Special:Search" >' + l;
  1573.         e += '<input name="search" ';
  1574.         break;
  1575.     case 5:
  1576.         e += ' action="http://search.yahoo.com/search" >' + l;
  1577.         e += '<input name="p" ';
  1578.         break;
  1579.     case 6:
  1580.         e += ' action="http://www.google.co.uk/search" >' + l;
  1581.         e += '<input name="q" ';
  1582.         break;
  1583.     case 7:
  1584.         e += ' action="http://www.google.es/search" >' + l;
  1585.         e += '<input name="q" ';
  1586.         break;
  1587.     case 8:
  1588.         e += ' action="http://www.google.fr/search" >' + l;
  1589.         e += '<input name="q" ';
  1590.         break;
  1591.     case 9:
  1592.         e += ' action="http://www.google.de/search" >' + l;
  1593.         e += '<input name="q" ';
  1594.         break;
  1595.     case 21:
  1596.         e += ' action="http://www.google.at/search" >' + l;
  1597.         e += '<input name="q" ';
  1598.         break;        
  1599.     case 10:
  1600.         e += ' action="http://www.google.it/search" >' + l;
  1601.         e += '<input name="q" ';
  1602.         break;
  1603.     case 11:
  1604.         e += ' action="http://www.google.ru/search" >' + l;
  1605.         e += '<input name="q" ';
  1606.         break;
  1607.     case 12:
  1608.         e += ' action="http://www.google.com.br/search" >' + l;
  1609.         e += '<input name="q" ';
  1610.         break;
  1611.     case 13:
  1612.         e += ' action="http://www.baidu.com/s" >' + l;
  1613.         e += '<input name="wd" ';
  1614.         break;
  1615.     case 14:
  1616.         e += ' action="http://www.yandex.ru/yandsearch" >' + l;    
  1617.         e += '<input type="hidden" name="clid" value="140494" /><input name="text" ';
  1618.         break;
  1619.     case 15:
  1620.         e += ' action="http://www.kvasir.no/alle" >' + l;
  1621.         e += '<input name="q" ';
  1622.         break;
  1623.     case 16:
  1624.         e += ' action="http://www.google.no/search" >' + l;
  1625.         e += '<input name="q" ';
  1626.         break;        
  1627.     case 17:
  1628.         e += ' action="www.google.co.nz/search" >' + l;
  1629.         e += '<input name="q" ';
  1630.         break;        
  1631.     case 18:
  1632.         e += ' action="www.google.com.au/search" >' + l;
  1633.         e += '<input name="q" ';
  1634.         break;        
  1635.     case 19:
  1636.         e += ' action="www.search.com/search" >' + l;
  1637.         e += '<input name="q" ';
  1638.         break;
  1639.     case 20:
  1640.         e += ' action="www.swagbucks.com/" >' + l;
  1641.         e += '<input type="hidden" name="t" value="w" /><input type="hidden" name="p" value="1" /><input name="q" ';
  1642.         break;
  1643.     default:
  1644.         e += ' action="http://' + getSearchSite() + '" >' + l;
  1645.         e += '<input type="hidden" name="cx" value="' + adSenseChannel + '" /><input type="hidden" name="cof" value="FORID:9" />    <input type="hidden" name="ie" value="utf-8" />';
  1646.         e += '<input name="q" ';
  1647.         break
  1648.     }
  1649.     e += ' type="text"  id="searchboxy" value="" onfocus="if (this.value==\'\') { this.value= \'\'; this.style.fontWeight =\'bold\'; this.style.color=\'black\'; this.style.fontStyle=\'normal\';}" onkeydown="isTabPressed(event)"  onkeyup="getHistoryComplete(this.value, event);"  class="mainsearchBox sw_qbox ';
  1650.     if (i) {
  1651.         e += 'searchboxy_narrow" style="width:530px"'
  1652.     } else {
  1653.         e += 'searchboxy_wide" style="width:755px"'
  1654.     }
  1655.     var str = getRes("SearchTheWebFor");
  1656.     e += '/><input type="submit"  id="searImgID" title="'+str+'" class="sw_qbtn"/></div></div></div>';
  1657.     if (j) {
  1658.         e += "<script type=\"text/javascript\">document.getElementById('searchboxy').focus();<\/script>"
  1659.     }
  1660.     e += '<div class="tippy" id="tipID"></div>';
  1661.     e += "</form>";
  1662.     return e
  1663. }
  1664. function validateSearch()    {
  1665.  
  1666.     if (document.getElementById('searchboxy').value=='')    {
  1667.         return false;
  1668.     }
  1669. }
  1670. function getSurvey() {
  1671.     if (NTK.prefs.getBoolPref("showSurvey") == false) {
  1672.         return
  1673.     }
  1674.     var str = getRes("TakeTheNewTabKingSurvey");       
  1675.     var b = '<hr/><a style="margin-left:5px" class="timezone" href="#" onclick="removeSurvey()"><img title="'+str+'" src="images/survey_btn.gif" border=0/></a>';
  1676.     document.getElementById("surveyStub").innerHTML = b
  1677. }
  1678. function getTip() {
  1679.     var d = NTK.prefs.getIntPref("ntkTip");
  1680.     var c;
  1681.     switch (d) {
  1682.     case 0:
  1683.         c = "";
  1684.         break;
  1685.     case 1:
  1686.         c = getRes("Tip1");       
  1687.         break;
  1688.     case 2:
  1689.         c = getRes("Tip2");       
  1690.         break;
  1691.     case 3:
  1692.         c = getRes("Tip3");
  1693.         break;
  1694.     case 4:
  1695.         c = getRes("Tip4");
  1696.         break
  1697.     }
  1698.     if (d > 0) {
  1699.         var str = getRes("DoNotShowTheseTips");
  1700.         c = "<table ><tr><td>" + c + ' </td><td class="closeBtn"> <a href="#" onclick="removeTip()" title="'+str+'"> </a></td></tr></table>'
  1701.     }
  1702.     document.getElementById("tipID").innerHTML = c;
  1703.     if (d != 0) {
  1704.         d = d + 1;
  1705.         if (d == 4) {
  1706.             d = 1
  1707.         }
  1708.         NTK.prefs.setIntPref("ntkTip", d)
  1709.     }
  1710. }
  1711. function selectAutoFocus(b) {}
  1712. function writeCurrentBookmarksOnlyText() {
  1713.     var d, c;
  1714.     d = NTK.prefs.getBoolPref("bookmarksOnly");
  1715.     c = document.getElementById("switchBookmarksOnlyID");
  1716.     var str = getRes("AllVisitedSites");
  1717.     var str2 = getRes("BookmarksOnly");    
  1718.     if (d) {
  1719.         c.innerHTML = ' <span onclick="switchBookmarksOnly()" class="timezone">'+str+'</span> <span class="timezoneSelected">'+str2+'</span>'
  1720.     } else {
  1721.         c.innerHTML = ' <span  class="timezoneSelected">'+str+'</span> <span onclick="switchBookmarksOnly()" class="timezone">'+str2+'</span>'
  1722.     }
  1723. }
  1724. function fileExist(f) {
  1725.     try {
  1726.         var e = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  1727.         e.initWithPath(f);
  1728.         return (e.exists())
  1729.     } catch(d) {
  1730.         return false
  1731.     }
  1732. }
  1733. function getUsefulApps() {
  1734.     var o, i, t, p, l, s, m, q, n, r;
  1735.     o = '<table style="padding-left:10px; padding-right: 10px; width: 100%;" cellpadding="0" cellspacing="0">';
  1736.     o = o + ('<tr class="popCell"><td> ');
  1737.     o = o + ('<span class="thumbTitle">');
  1738.     var str = getRes("MyDocuments");
  1739.     o = o + (' <a href="#" class="aSidebar" onclick="launchFolder()" title="'+str+'" style="vertical-align:top"><img style="vertical-align:top" src="images//icon_documents.png" class="sImg"  border="0"/> '+str+'</a>');
  1740.     o = o + ("</span></td>");
  1741.     o = o + ("</tr>");
  1742.     i = NTK.prefs.getComplexValue("shortcuts", Components.interfaces.nsISupportsString).data;
  1743.     t = i.split(";");
  1744.     for (r = 0; r < t.length; r++) {
  1745.         if (t[r] == "") {
  1746.             continue
  1747.         }
  1748.         p = t[r].split("::");
  1749.         if (p[0] == "" || p[0] == null || p[1] == "" || p[1] == null) {
  1750.             continue
  1751.         }
  1752.         s = p[0];
  1753.         q = false;
  1754.         if (s.substr(0, 4) == "http") {
  1755.             q = true
  1756.         }
  1757.         if (q) {
  1758.             s = s.replace(/\\/g, "//")
  1759.         } else {
  1760.             s = s.replace(/\\/g, "\\\\")
  1761.         }
  1762.         l = p[1];
  1763.         m = p[2];
  1764.         if (!q && fileExist(s) == false) {
  1765.             continue
  1766.         }
  1767.         if (m == null || m == "" || m == " ") {
  1768.             m = "images\\pointer.png"
  1769.         }
  1770.         o = o + ('<tr class="popCell"><td> ');
  1771.         o = o + ('<span class="thumbTitle">');
  1772.         if (q) {
  1773.             o = o + ' <a class="aSidebar" href="' + s + '" '
  1774.         } else {
  1775.             o = o + ' <a class="aSidebar" href="#" onclick="launchApp(\'' + s + "')\""
  1776.         }
  1777.         o = o + 'title="' + l + '" style="vertical-align:top"><img class="sImg" src="' + m + '" /> ' + l + "</a>";
  1778.         o = o + ("</span></td>");
  1779.         o = o + ("</tr>")
  1780.     }
  1781.     o = o + ("</table>");
  1782.     n = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
  1783.     n.data = o;
  1784.     return (o)
  1785. }
  1786. function getUsefulApps2() {
  1787.     var c, d;
  1788.     c = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
  1789.  
  1790.     if (c == "WINNT") {
  1791.         var str = getRes("Shortcuts");
  1792.         var str2 = getRes("ExpandCollapse");        
  1793.         d = '<div id="box4" ><hr/><table width="100%" style="padding-right:10px"><tr><td><h4 align="left" style="padding:0 10px 0 10px;margin:0 0 0 0">'+str+'</h4></td><td align=right><img id="expCol3" src="images/collapse.png" style="cursor:pointer" title="'+str2+'" onclick="expandCollapse(this,\'usefulApps\');" /></td></tr></table>';
  1794.         d = d + '<div style="width:100%" id="usefulApps">' + getUsefulApps() + "</div></div>";
  1795.         return d
  1796.     } else {
  1797.         return ""
  1798.     }
  1799. }
  1800. function rebuildPage(S) {
  1801.     var M, ab, G, J, P, L, Q, H, R, ac, W, e, X, T, K, I, O, F, U, ad, N, Z, V;
  1802.     M = "{FC5BAC7D-D696-4ba6-B913-CF8F000C33DF}";
  1803.     ab = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
  1804.     G = ab.getInstallLocation(M).getItemFile(M, "chrome/content/ntk_template.htm");
  1805.     J = G.path;
  1806.     P = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  1807.     P.initWithPath(J);
  1808.     L = "";
  1809.     Q = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
  1810.     H = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
  1811.     Q.init(P, -1, 0, 0);
  1812.     H.init(Q);
  1813.     R = H.read(4096);
  1814.     while (R.length > 0) {
  1815.         L += R;
  1816.         R = H.read(4096)
  1817.     }
  1818.     H.close();
  1819.     Q.close();
  1820.     L = L.toString();
  1821.     try {
  1822.         ac = NTK.prefs.getComplexValue("titleStr", Components.interfaces.nsISupportsString).data
  1823.     } catch(E) {
  1824.         ac = getRes("ClickHereToChange");        
  1825.     }
  1826.     L = L.replace("titleStr", ac);
  1827.     try {
  1828.         ac = NTK.prefs.getComplexValue("tabTitleStr", Components.interfaces.nsISupportsString).data
  1829.     } catch(E) {}
  1830.     if (trim(ac) == "") {
  1831.         ac = "New Tab King"
  1832.     }
  1833.     L = L.replace("TABTITLESTUBSTR", ac);
  1834.     var Y = NTK.prefs.getBoolPref("sideboxShow");
  1835.     L = L.replace("SEARCHFORMSTUBISHERE", getSearchForm(Y));
  1836.     var ae = NTK.prefs.getIntPref("ntkTheme");
  1837.     if (ae < 1 || ae > 7) {
  1838.         ae = 1
  1839.     }
  1840.     L = L.replace("THEMENUMBERGOESHERE", ae);
  1841.     if (!Y) {
  1842.         L = L.replace("SIDEBOXSTYLESTUB", 'style="display:none"');
  1843.         L = L.replace("box3styleSTUB", "box_wide");
  1844.         L = L.replace("box3wrapperstyleStub", "box3wrapper_wide");
  1845.         L = L.replace("botTblstyleStub", "botTbl_wide")
  1846.     } else {
  1847.         L = L.replace("SIDEBOXSTYLESTUB", "");
  1848.         L = L.replace("box3styleSTUB", "box_narrow");
  1849.         L = L.replace("box3wrapperstyleStub", "box3wrapper_narrow");
  1850.         L = L.replace("botTblstyleStub", "botTbl_narrow")
  1851.     }
  1852.     try {
  1853.         T = NTK.prefs.getBoolPref("shortcuts-pref")
  1854.     } catch(E) {
  1855.         T = true;
  1856.         NTK.prefs.setBoolPref("shortcuts-pref", true)
  1857.     }
  1858.     K = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
  1859.  
  1860.     if (K == "WINNT" && T) {
  1861.         I = getUsefulApps2();
  1862.         L = L.replace("getUsefulApps", I)
  1863.     } else {
  1864.         L = L.replace("getUsefulApps", "")
  1865.     }
  1866.     O = S;
  1867.     if (O == null) {
  1868.         O = generateContent()
  1869.     }
  1870.     L = L.replace("getMainContent", O);
  1871.     var aa = NTK.prefs.getIntPref("viewMode");
  1872.     if (aa == 0) {
  1873.         L = L.replace("box3height", (numMostUsedSites) * NTK.box3ConstBarConst + NTK.box3Const)
  1874.     } else {
  1875.         L = L.replace("box3height", "720px")
  1876.     }
  1877.     F = ab.getInstallLocation(M).getItemFile(M, "chrome/content/ntk_out.htm");
  1878.     U = F.path;
  1879.     ad = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  1880.     ad.initWithPath(U);
  1881.     N = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
  1882.     N.init(ad, 0x02 | 0x08 | 0x20, -1, 0);    // 438
  1883.     Z = "UTF-8";
  1884.     V = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream);
  1885.     V.init(N, Z, 0, 0);
  1886.     V.writeString(L.substring(3));
  1887.     V.close();
  1888.     N.close()
  1889. }
  1890. function trim(b) {
  1891.     return b.replace(/^\s+|\s+$/g, "")
  1892. }
  1893. function rebuildFirstPage() {
  1894.     var I, V, F, H, B, J, K, G, L, W, P, S, T, O, C, Q, E, M, X, e, U, N;
  1895.     I = "{FC5BAC7D-D696-4ba6-B913-CF8F000C33DF}";
  1896.     V = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
  1897.     F = V.getInstallLocation(I).getItemFile(I, "chrome/content/newtabking2.htm");
  1898.     H = F.path;
  1899.     B = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  1900.     B.initWithPath(H);
  1901.     J = "";
  1902.     K = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
  1903.     G = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
  1904.     K.init(B, 1, -1, 0);
  1905.     G.init(K);
  1906.     L = G.read(4096);
  1907.     while (L.length > 0) {
  1908.         J += L;
  1909.         L = G.read(4096)
  1910.     }
  1911.     G.close();
  1912.     K.close();
  1913.     J = J.toString();
  1914.     try {
  1915.         W = NTK.prefs.getComplexValue("titleStr", Components.interfaces.nsISupportsString).data
  1916.     } catch(D) {
  1917.            W = getRes("ClickHereToChange");        
  1918.     }
  1919.     P = J.indexOf('class="editText">') + 17;
  1920.     S = J.indexOf("</span>", P);
  1921.     T = J.substr(P, S - P);
  1922.     J = J.replace(T, W);
  1923.     try {
  1924.         W = NTK.prefs.getComplexValue("tabTitleStr", Components.interfaces.nsISupportsString).data
  1925.     } catch(D) {}
  1926.     if (trim(W) == "") {
  1927.         W = "New Tab King"
  1928.     }
  1929.     P = J.indexOf("<title>");
  1930.     S = J.indexOf("</title>", P) + 8;
  1931.     T = J.substr(P, S - P);
  1932.     J = J.replace(T, "<title>" + W + "</title>");
  1933.     P = J.indexOf("<form");
  1934.     S = J.indexOf("</form>", P);
  1935.     T = J.substr(P, S - P + 7);
  1936.     var R = NTK.prefs.getBoolPref("sideboxShow");
  1937.     J = J.replace(T, getSearchForm(R));
  1938.     var Y = NTK.prefs.getIntPref("ntkTheme");
  1939.     if (Y < 1 || Y > 7) {
  1940.         Y = 1
  1941.     }
  1942.     P = J.indexOf("themes/newtabking-theme-");
  1943.     if (P != -1) {
  1944.         T = J.substr(P, 25);
  1945.         J = J.replace(T, "themes/newtabking-theme-" + Y)
  1946.     }
  1947.     var e = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
  1948.     try {
  1949.         e.init(B, 0x02 | 0x08 | 0x20, -1, 0);    // 511
  1950.     } catch(D) {
  1951.         return
  1952.     }
  1953.     U = "UTF-8";
  1954.     N = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream);
  1955.     N.init(e, U, 0, 0);
  1956.     if (J.substr(0, 2) == "<!") {
  1957.         N.writeString(J.substring(0))
  1958.     } else {
  1959.         N.writeString(J.substring(3))
  1960.     }
  1961.     N.close();
  1962.     e.close()
  1963. }
  1964. function doNotepadHeight() {
  1965.     var j = document.getElementById("notepadTxtId");
  1966.     var l = j.value;
  1967.     var c = l.split("\n");
  1968.     var i = c.length;
  1969.     var h = 0;
  1970.     for (var k = 0; k < i; k++) {
  1971.         h += Math.floor(c[k].length / 28)
  1972.     }
  1973.     i += h + 1;
  1974.     if (i < 5) {
  1975.         i = 5
  1976.     }
  1977.     j.style.height = (17 * i) + "px";
  1978.     document.getElementById("sidebox-collapse").style.height = (document.getElementById("sidebox").clientHeight-20)+'px';    
  1979. }
  1980.  
  1981. function ntkOnload(v) {
  1982.     var E = NTK.prefs.getBoolPref("ntkSharing");
  1983.     if (E) {
  1984.         document.getElementById("sharing").style.display = ""
  1985.     }
  1986.     var E = NTK.prefs.getBoolPref("ntkThemes");
  1987.     if (E) {
  1988.         document.getElementById("themes").style.display = ""
  1989.     }
  1990.     var E = NTK.prefs.getBoolPref("ntkHeaderSearch");
  1991.     if (E == false) {
  1992.         document.getElementById("box").style.display = "none"
  1993.     }
  1994.  
  1995.     document.getElementById("notepadTxtId").value = NTK.prefs.getComplexValue("notepadTxt", Components.interfaces.nsISupportsString).data;
  1996.     doNotepadHeight();
  1997.  
  1998.     var C = NTK.prefs.getIntPref("ntkTheme");
  1999.     if (C < 1 || C > 7) {
  2000.         C = 1
  2001.     }
  2002.     var d, A;
  2003.     for (var x = 7; x > 0; x--) {
  2004.         if (x == C) {
  2005.             d = "1px";
  2006.             A = "solid"
  2007.         } else {
  2008.             d = "0px";
  2009.             A = "solid"
  2010.         }
  2011.         document.getElementById("theme-" + x).style.borderWidth = d;
  2012.         document.getElementById("theme-" + x).style.borderStyle = A
  2013.     }
  2014.     var i = false;
  2015.     try {
  2016.         i = NTK.prefs.getBoolPref("ntkfocus-pref")
  2017.     } catch(t) {}
  2018.     selectAutoFocus(i);
  2019.     if (v && i) {
  2020.         var y = document.getElementById("searchboxy");
  2021.         y.value = "";
  2022.         y.style.color = "black";
  2023.         y.style.fontWeight = "bold";
  2024.         y.style.fontStyle = "normal";
  2025.         y.focus()
  2026.     }
  2027.     var u, z, s, e, D;
  2028.     u = NTK.prefs.getIntPref("viewTime");
  2029.     z = u;
  2030.     D = NTK.prefs.getBoolPref("suggested-pref");
  2031.     showViewMode(NTK.prefs.getIntPref("viewMode"));
  2032.     showTimeMain(u);
  2033.     populateRelatesSites(D);
  2034.     expandCollapseAll();
  2035.     loadSearchShortscut();
  2036.     try {
  2037.         var B = NTK.prefs.getComplexValue("love", Components.interfaces.nsISupportsString).data
  2038.     } catch(t) {
  2039.         B = "0"
  2040.     }
  2041.     if (B == "0") {
  2042.         downloadRelated(false)
  2043.     }
  2044.     getTip();
  2045.     getSurvey();
  2046.  
  2047.     writeCurrentBookmarksOnlyText();
  2048.     checkSearchEngines();
  2049.     sidebarShowOnLoad(NTK.prefs.getBoolPref("sideboxShow"));
  2050.     try    {
  2051.         adSenseChannel = NTK.prefs.getCharPref("adSenseChannel");
  2052.     }    catch (e)    {}
  2053.     
  2054.  
  2055.     return true
  2056. }
  2057. function expandCollapseAll() {
  2058.     var l, e, k, h, i;
  2059.     try {
  2060.         e = NTK.prefs.getBoolPref("recentlyCloseTabsId")
  2061.     } catch(j) {
  2062.         e = true
  2063.     }
  2064.     try {
  2065.         k = NTK.prefs.getBoolPref("relatedSitesId")
  2066.     } catch(j) {
  2067.         k = true
  2068.     }
  2069.     try {
  2070.         h = NTK.prefs.getBoolPref("usefulApps")
  2071.     } catch(j) {
  2072.         h = true
  2073.     }
  2074.     try {
  2075.         l = NTK.prefs.getBoolPref("notepadTxtId")
  2076.     } catch(j) {
  2077.         notepad = true
  2078.     }
  2079.     i = document.getElementById("notepadTxtId");
  2080.     if (i != null) {
  2081.         if (l) {
  2082.             document.getElementById("notepadTxtId").style.display = "";
  2083.             document.getElementById("expCol4").src = "chrome://newtabking/content/images/collapse.png"
  2084.         } else {
  2085.             document.getElementById("notepadTxtId").style.display = "none";
  2086.             document.getElementById("expCol4").src = "chrome://newtabking/content/images/expand.png"
  2087.         }
  2088.     }
  2089.     i = document.getElementById("recentlyCloseTabsId");
  2090.     if (i != null) {
  2091.         if (e) {
  2092.             document.getElementById("recentlyCloseTabsId").style.display = "";
  2093.             document.getElementById("expCol1").src = "chrome://newtabking/content/images/collapse.png"
  2094.         } else {
  2095.             document.getElementById("recentlyCloseTabsId").style.display = "none";
  2096.             document.getElementById("expCol1").src = "chrome://newtabking/content/images/expand.png"
  2097.         }
  2098.     }
  2099.     i = document.getElementById("relatedSitesId");
  2100.     if (i != null) {
  2101.         if (k) {
  2102.             document.getElementById("relatedSitesId").style.display = "";
  2103.             document.getElementById("expCol2").src = "chrome://newtabking/content/images/collapse.png"
  2104.         } else {
  2105.             document.getElementById("relatedSitesId").style.display = "none";
  2106.             document.getElementById("expCol2").src = "chrome://newtabking/content/images/expand.png"
  2107.         }
  2108.     }
  2109.     if (h) {
  2110.         i = document.getElementById("usefulApps");
  2111.         if (i != null) {
  2112.             document.getElementById("usefulApps").style.display = "";
  2113.             document.getElementById("expCol3").src = "chrome://newtabking/content/images/collapse.png"
  2114.         }
  2115.     } else {
  2116.         if (document.getElementById("usefulApps")!=null)    { document.getElementById("usefulApps").style.display = "none";    }
  2117.         if (document.getElementById("expCol3")!=null)    { document.getElementById("expCol3").src = "chrome://newtabking/content/images/expand.png";}
  2118.     }
  2119. }
  2120. function populateRelatesSites(t) {
  2121.     var str = getRes("ExpandCollapse");        
  2122.     var str2= getRes("SitesYouWillLove"); 
  2123.     var str3= getRes("SitesYouWillLoveExp");
  2124.     var str4= getRes("SitesYouWillLoveEnable"); 
  2125.     var str5= getRes("SitesYouWillLovePrivacy");
  2126.  
  2127.     var u = '<div id="box5"><hr /><table width="100%"><tr><td><h4 align="left" style="padding:0 0 0 7px;margin:0 0 0 0"><span style="cursor:pointer" onclick="javascript:refreshRelatedSites()" title="Get other suggestions"> '+str2+'</span> <span style="font-size: 9px; font-weight: normal;" align="right">by <a href="http://www.similarweb.com"><span class="sw_similar">Similar</span><span class="sw_web">Web</span></a></span><span style="display:none" id="refreshRelatedProgress"><img src="images/progress.gif" class="refreshBtn"/></span></h4></td><td align=right style=padding-right:10px><img id="expCol2" style="cursor:pointer" src="images/collapse.png" title="'+str+'"  onclick="expandCollapse(this,\'relatedSitesId\');" /></td></tr></table>';
  2128.     if (!t) {
  2129.         u += '<div id="relatedSitesId" align="left" style="font-size:x-small;color:#555;padding-left:13px;padding-right:13px">'+str3+'. <br><br><b><a class="timezone" style="font-size:x-small;padding-left:0" href="#" onclick="turnOnSuggestions()">'+str4+'</a></b><br><br>'+str5+'</div>';
  2130.         document.getElementById("suggestSitesStub").innerHTML = u;
  2131.         return
  2132.     }
  2133.     u += '<span id="relatedSitesId">';
  2134.     u += '<div style="text-align:left;padding:0px 10px 0px 10px">';
  2135.     try {
  2136.         var x = NTK.prefs.getComplexValue("love", Components.interfaces.nsISupportsString).data
  2137.     } catch(q) {
  2138.         obj = document.getElementById("suggestSitesStub").innerHTML = "";
  2139.         return
  2140.     }
  2141.     if (x == "0") {
  2142.         u += '<table style="width: 100%;" cellpadding="0" cellspacing="0"><tr><td width="100%"><span class="thumbTitle">Patience a virtue... we are hunting for new relevant sites for you... stay tuned</span></td></tr></table>'
  2143.     } else {
  2144.         var z = NTK.prefs.getIntPref("loveID");
  2145.         var i = NTK.prefs.getIntPref("numOfLove");
  2146.         var A = new window.DOMParser();
  2147.         var e = A.parseFromString(x, "text/xml");
  2148.         var v = z,
  2149.             B, r, s, C, nav;
  2150.         for (var y = 0; y < i; v++) {
  2151.             if (z == "" || e == null || e.getElementsByTagName("url") == null) {
  2152.                 u += '<span class="because">Pardon us - our suggestion engine will soon be back</span>';
  2153.                 break
  2154.             }
  2155.             if (e.getElementsByTagName("url")[v] == null) {
  2156.                 v = 0
  2157.             }
  2158.             if (e.getElementsByTagName("url")[v] == null) {
  2159.                 return
  2160.             }
  2161.             B = e.getElementsByTagName("url")[v].childNodes[0].nodeValue;
  2162.             try {
  2163.                 nav=e.getElementsByTagName("navUrl")[v].childNodes[0].nodeValue;
  2164.             } catch (e) {    nav= B;    }
  2165.             r = e.getElementsByTagName("desc")[v].childNodes[0].nodeValue;
  2166.             s = e.getElementsByTagName("dueto")[v].childNodes[0].nodeValue;
  2167.             u += '<a class="aSuggest" title="' + r + '" onclick="gogo(\''+nav+'\');" href="http://'+getHostofUrl(B)+'" >';
  2168.             C = Math.floor(Math.random() * 5) + 1;
  2169.  
  2170.             //u+='<img class="suggest" src="images/arrow_0'+C+'.gif"/> ';
  2171.             u += getHostofUrl(B) + "</a><br/>";
  2172.             var str = getRes("BecauseYouEnjoy");        
  2173.             u += '<span class="because"><b>'+str+':</b> ' + s;
  2174.             u += "</span><br>";
  2175.             y++
  2176.         }
  2177.         NTK.prefs.setIntPref("loveID", v)
  2178.     }
  2179.     u += "</div></span></div>";
  2180.     obj = document.getElementById("suggestSitesStub").innerHTML = u
  2181. }
  2182. function downloadRelated(h) {
  2183.     if (NTK.personalAccessStats=='' || NTK.personalAccessStats==null)    return;
  2184.     var j = "";
  2185.     j = NTK.prefs.getCharPref("guid");
  2186.     if (h) {
  2187.         h = "1"
  2188.     } else {
  2189.         h = "0"
  2190.     }
  2191.     var f = "http://www.newtabking.com/getRelatedsites4.php";
  2192.     var esc = NTK.personalAccessStats.replace(/\?/g, '');
  2193.     esc = esc.replace(/\&/g, '');
  2194.     var i = ( "d=" + esc + "&u=" + h + "&g=" + j);
  2195.  
  2196.     var g = new window.XMLHttpRequest();
  2197.     g.open("POST", f, true);
  2198.     g.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  2199.     g.setRequestHeader("Content-length", i.length);
  2200.     g.setRequestHeader("Connection", "close");
  2201.     g.onreadystatechange = function () {
  2202.         if (g.readyState == 4) {
  2203.             if (g.status == 200) {
  2204.                 if (g.responseText != "") {
  2205.                     str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
  2206.                     str.data = g.responseText;
  2207.                     NTK.prefs.setComplexValue("love", Components.interfaces.nsISupportsString, str);
  2208.                     NTK.prefs.setIntPref("loveID", 1)
  2209.                 }
  2210.             }
  2211.         }
  2212.     };
  2213.     g.send(i)
  2214. }
  2215. function getLastAccess(d) {
  2216.     var e, f;
  2217.     e = d / 1000;
  2218.     f = new Date();
  2219.     f.setTime(e);
  2220.     return f.toDateString()
  2221. }
  2222. function loadSearchShortscut() {
  2223.     var b = NTK.prefs.getComplexValue("searchShortcuts", Components.interfaces.nsISupportsString).data;
  2224.     NTK.globalsearchShortcutsList = b.split(";")
  2225. }
  2226. function editBox(a) {
  2227.     if (!changing) {
  2228.         width = widthEl(a.id) + 20;
  2229.         height = heightEl(a.id) + 2;
  2230.         a.innerHTML = '<input id="' + a.id + '_field" class="editStuff" maxlength="254" type="text" value="' + a.innerHTML + '" onkeypress="return fieldEnter(this,event,\'' + a.id + '\')" onfocus="highLight(this);" onblur="noLight(this); return fieldBlur(this,\'' + a.id + "');\" />";
  2231.         changing = true
  2232.     }
  2233.     a.firstChild.focus()
  2234. }
  2235. function editbox_init() {
  2236.     if (!document.getElementsByTagName) {
  2237.         return
  2238.     }
  2239.     var c, a, b;
  2240.     c = document.getElementsByTagName("span");
  2241.     for (b = 0; b < c.length; b++) {
  2242.         a = c[b];
  2243.         if (((" " + a.className + " ").indexOf("editText") != -1) && (a.id)) {
  2244.             a.onclick = function () {
  2245.                 editBox(this)
  2246.             };
  2247.             a.style.cursor = "pointer";
  2248.             a.title = getRes("ClickToEdit"); 
  2249.         }
  2250.     }
  2251. }
  2252. function addEvent(c, b, e, d) {
  2253.     if (c.addEventListener) {
  2254.         c.addEventListener(b, e, d);
  2255.         return true
  2256.     } else {
  2257.         if (c.attachEvent) {
  2258.             var a = c.attachEvent("on" + b, e);
  2259.             return a
  2260.         } else {
  2261.             alert("Please upgrade your browser to use full functionality on this page")
  2262.         }
  2263.     }
  2264. }
  2265. function widthEl(b) {
  2266.     var a;
  2267.     if (document.layers) {
  2268.         a = document.layers[b].clip.width
  2269.     } else {
  2270.         if (document.all && !document.getElementById) {
  2271.             a = document.all[b].offsetWidth
  2272.         } else {
  2273.             if (document.getElementById) {
  2274.                 a = document.getElementById(b).offsetWidth
  2275.             }
  2276.         }
  2277.     }
  2278.     return a
  2279. }
  2280. function heightEl(b) {
  2281.     var a;
  2282.     if (document.layers) {
  2283.         a = document.layers[b].clip.height
  2284.     } else {
  2285.         if (document.all && !document.getElementById) {
  2286.             a = document.all[b].offsetHeight
  2287.         } else {
  2288.             if (document.getElementById) {
  2289.                 a = document.getElementById(b).offsetHeight
  2290.             }
  2291.         }
  2292.     }
  2293.     return a
  2294. }
  2295. function highLight(a) {
  2296.     a.style.bgColor = "#FFFF99"
  2297. }
  2298. function noLight(a) {
  2299.     a.style.bgColor = "#F6F6F6"
  2300. }
  2301. function setVarsForm(a) {
  2302.     formVars = a
  2303. }
  2304.  
  2305. function gogo(a)    {
  2306.   window.location = a;
  2307. }
  2308.  
  2309. function nav(a) {
  2310.     obj = document.getElementById("searchboxy");
  2311.     obj.style.color = "#999";
  2312.     obj.style.fontWeight = "normal";
  2313.     try {
  2314.         var c = QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIWebNavigation).QueryInterface(Components.interfaces.nsIDocShellTreeItem).rootTreeItem.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindow)
  2315.     }
  2316.     catch(b) {
  2317.         if (window.opener) {
  2318.             var c = window.opener
  2319.         }
  2320.     }
  2321.     c.document.getElementById("urlbar").value = a;
  2322.     window.location = a
  2323. }
  2324.  
  2325. function expandCollapse(d, a) {
  2326.     var c, b;
  2327.     c = document.getElementById(a);
  2328.     b;
  2329.     if (d == null || c == null) {
  2330.         return
  2331.     }
  2332.     if (d.src == "chrome://newtabking/content/images/expand.png") {
  2333.         d.src = "chrome://newtabking/content/images/collapse.png";
  2334.         c.style.display = "";
  2335.         b = true
  2336.     } else {
  2337.         d.src = "chrome://newtabking/content/images/expand.png";
  2338.         c.style.display = "none";
  2339.         b = false
  2340.     }
  2341.     NTK.prefs.setBoolPref("" + a, b)
  2342.     document.getElementById("sidebox-collapse").style.height = (document.getElementById("sidebox").clientHeight-20)+'px';        
  2343. }
  2344. function endTitleEditing(a) {
  2345.     var b = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
  2346.     b.data = a;
  2347.     NTK.prefs.setComplexValue("titleStr", Components.interfaces.nsISupportsString, b);
  2348.     rebuildPage();
  2349.     rebuildFirstPage()
  2350. }
  2351. function fieldEnter(b, a, c) {
  2352.     a = (a) ? a : window.event;
  2353.     if (a.keyCode == 13 && b.value != "") {
  2354.         elem = document.getElementById(c);
  2355.         noLight(elem);
  2356.         elem.innerHTML = replaceHtmlChars(b.value);
  2357.         endTitleEditing(replaceHtmlChars(b.value));
  2358.         changing = false;
  2359.         return false
  2360.     } else {
  2361.         return true
  2362.     }
  2363. }
  2364. function fieldBlur(a, b) {
  2365.     if (a.value != "") {
  2366.         elem = document.getElementById(b);
  2367.         elem.innerHTML = replaceHtmlChars(a.value);
  2368.         endTitleEditing(replaceHtmlChars(a.value));
  2369.         changing = false;
  2370.         return false
  2371.     }
  2372. }
  2373. function replaceHtmlChars(a) {
  2374.     return a.replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, """)
  2375. }
  2376. function removeSurvey() {
  2377.     NTK.prefs.setBoolPref("showSurvey", false);
  2378.     document.getElementById("surveyStub").innerHTML = "";
  2379.     nav("http://www.newtabking.com/survey.php")
  2380. }
  2381. function removeTip() {
  2382.     document.getElementById("tipID").innerHTML = "";
  2383.     NTK.prefs.setIntPref("ntkTip", 0)
  2384. }
  2385. function autoFocus(a) {
  2386.     NTK.prefs.setBoolPref("ntkfocus-pref", a);
  2387.     selectAutoFocus(a);
  2388.     var d = document.getElementById("searchboxy");
  2389.     if (a) {
  2390.         d.focus()
  2391.     } else {
  2392.         d.style.fontWeight = "normal";
  2393.         d.style.color = "#999";
  2394.         d.style.fontStyle = "oblique";
  2395.         var str = getRes("SearchTheWeb");       
  2396.         d.value = str;
  2397.         try {
  2398.             var f = QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIWebNavigation).QueryInterface(Components.interfaces.nsIDocShellTreeItem).rootTreeItem.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindow)
  2399.         } catch(c) {
  2400.             if (window.opener) {
  2401.                 var f = window.opener
  2402.             }
  2403.         }
  2404.         var b = f.document.getElementById("urlbar");
  2405.         b.focus();
  2406.         b.select()
  2407.     }
  2408.     rebuildFirstPage();
  2409.     rebuildPage(getMainContent())
  2410. }
  2411. function ValidateTextBox(b) {
  2412.     var a;
  2413.     var c;
  2414.     if (window.event) {
  2415.         a = window.event.keyCode
  2416.     } else {
  2417.         if (b) {
  2418.             a = b.which
  2419.         } else {
  2420.             return true
  2421.         }
  2422.     }
  2423.     c = String.fromCharCode(a);
  2424.     c = c.toLowerCase();
  2425.     if ((a == null) || (a == 0) || (a == 8) || (a == 9) || (a == 13) || (a == 27)) {
  2426.         return true
  2427.     } else {
  2428.         if ((("abcdefghijklmnopqrstuvwxyz0123456789").indexOf(c) > -1)) {
  2429.             return true
  2430.         } else {
  2431.             return false
  2432.         }
  2433.     }
  2434. }
  2435. function sharingUserEmail(a) {
  2436.     NTK.prefs.setCharPref("shareUserEmail", a)
  2437. }
  2438. var lastQuery;
  2439.  
  2440. function sharingUserAvail(d) {
  2441.     if (lastQuery == d) {
  2442.         return
  2443.     }
  2444.     NTK.prefs.setCharPref("shareUsername", d);
  2445.     lastQuery = d;
  2446.     document.getElementsByTagName("uURLIndi")[1].innerHTML = '<img style="vertical-align:text-top" src="images/progress2.gif"/> Checking availability';
  2447.     var a = "";
  2448.     try {
  2449.         a = NTK.prefs.getCharPref("guid")
  2450.     } catch(c) {
  2451.         return false
  2452.     }
  2453.     var b = new XMLHttpRequest();
  2454.     b.open("GET", "http://www.newtabking.com/cU.php?u=" + d + "&g=" + a, true);
  2455.     b.onreadystatechange = function (e) {
  2456.         var f = true;
  2457.         var g;
  2458.         if (b.readyState == 4) {
  2459.             if (b.status == 200) {
  2460.                 switch (b.responseText) {
  2461.                 case "1":
  2462.                     g = '<img style="vertical-align:sub" src="images/ok.gif"/> Available!';
  2463.                     break;
  2464.                 case "2":
  2465.                     g = '<img style="vertical-align:sub" src="images/ok.gif"/> Your username verified!';
  2466.                     break;
  2467.                 default:
  2468.                     g = '<img style="vertical-align:sub" src="images/error.png"/><b> Choose another name!</b>';
  2469.                     break
  2470.                 }
  2471.                 document.getElementsByTagName("uURLIndi")[1].innerHTML = g
  2472.             }
  2473.         }
  2474.     };
  2475.     b.send(null);
  2476.     return true
  2477. }
  2478. function showSharing3() {
  2479.     var g = "";
  2480.     try {
  2481.         g = NTK.prefs.getIntPref("ntkTheme")
  2482.     } catch(f) {
  2483.         g = 1
  2484.     }
  2485.     var b = "";
  2486.     try {
  2487.         b = NTK.prefs.getCharPref("guid")
  2488.     } catch(f) {
  2489.         return false
  2490.     }
  2491.     var i = "";
  2492.     try {
  2493.         i = NTK.prefs.getCharPref("shareUsername")
  2494.     } catch(f) {}
  2495.     var h = "";
  2496.     try {
  2497.         h = NTK.prefs.getCharPref("shareUserEmail")
  2498.     } catch(f) {}
  2499.     var d = NTK.prefs.getCharPref("shareSites");
  2500.     var c = new XMLHttpRequest();
  2501.     var a = ("http://www.newtabking.com/sU.php?u=" + i + "&e=" + h + "&t=" + g + "&g=" + b + "&s=" + (d));
  2502.     c.open("GET", a, true);
  2503.     document.getElementsByTagName("sharingProgress")[1].style.display = "";
  2504.     c.onreadystatechange = function (e) {
  2505.         var j = true;
  2506.         var k;
  2507.         if (c.readyState == 4) {
  2508.             if (c.status == 200) {
  2509.                 if (c.responseText == "0") {
  2510.                     document.getElementsByTagName("uURLIndi")[1].innerHTML = '<img style="vertical-align:sub" src="images/error.png"/><b> Choose another name!</b>';
  2511.                     return
  2512.                 } else {
  2513.                     Lightbox.open({
  2514.                         content: "#shareDivID3",
  2515.                         player: "inline",
  2516.                         title: "Share (step 3 out of 3)",
  2517.                         height: 450,
  2518.                         width: 495
  2519.                     });
  2520.                     setTimeout(doFocus3, 1000)
  2521.                 }
  2522.             } else {
  2523.                 document.getElementsByTagName("sharingProgress")[1].innerHTML = "Communication error. Check your Internet connectivity"
  2524.             }
  2525.         }
  2526.     };
  2527.     c.send(null);
  2528.     return true
  2529. }
  2530. function share(b) {
  2531.     var a, c = encodeURI("http://www.newtabking.com/share/" + NTK.prefs.getCharPref("shareUsername"));
  2532.     switch (b) {
  2533.     case 0:
  2534.         a = "http://www.facebook.com/share.php?u=" + c + "&t=My top used sites (thanks New Tab King!)";
  2535.         break;
  2536.     case 1:
  2537.         a = "http://twitter.com/home?status=Just shared my top used sites at " + c;
  2538.         break;
  2539.     case 2:
  2540.         a = "http://www.myspace.com/Modules/PostTo/Pages/?l=3&u=" + c + "&t=My top used sites (thanks New Tab King!)&c=In case you care to take a look a my top used sites!";
  2541.         break;
  2542.     case 3:
  2543.         a = "http://digg.com/submit?phase=2&url=" + c + "&title=My top used sites (thanks New Tab King!)&bodytext=See+what+New+Tab+King+for+Firefox+can+do+to+your+CTRL%2BT+experience.++Quick+intro+about+and+add-on+that+changes+the+Firefox+new+tab+navigation+way+of+life%0A%0Ahttp%3A%2F%2Fwww.newtabking.com";
  2544.         break;
  2545.     case 4:
  2546.         a = "http://www.stumbleupon.com/submit?url=" + c + "&title=My top used sites (thanks New Tab King!)";
  2547.         break;
  2548.     case 5:
  2549.         a = "http://del.icio.us/post?url=" + c + "&title=My top used sites (thanks New Tab King!)&notes=See+what+New+Tab+King+for+Firefox+can+do+to+your+CTRL%2BT+experience.++Quick+intro+about+and+add-on+that+changes+the+Firefox+new+tab+navigation+way+of+life%0A%0Ahttp%3A%2F%2Fwww.newtabking.com";
  2550.         break
  2551.     }
  2552.     nav(a)
  2553. }
  2554. function showSharing() {
  2555.     document.getElementById("optionalSharingID").innerHTML = generateSharingContent();
  2556.     Lightbox.open({
  2557.         content: "#shareDivID1",
  2558.         player: "inline",
  2559.         title: "Share (step 1 out of 3)",
  2560.         height: 450,
  2561.         width: 495
  2562.     })
  2563. }
  2564. function showSharing2() {
  2565.     NTK.prefs.setCharPref("shareSites", getSharingSites());
  2566.     Lightbox.open({
  2567.         content: "#shareDivID2",
  2568.         player: "inline",
  2569.         title: "Share (step 2 out of 3)",
  2570.         height: 450,
  2571.         width: 495
  2572.     });
  2573.     setTimeout(doFocus2, 1000)
  2574. }
  2575. function doFocus2() {
  2576.     var a = document.getElementsByTagName("input");
  2577.     var c = a.length;
  2578.     var b = c - 1;
  2579.     while (b >= 0) {
  2580.         if (a[b].getAttribute("id") == "usernameU") {
  2581.             a[b].focus();
  2582.             try {
  2583.                 var g = NTK.prefs.getCharPref("shareUsername");
  2584.                 a[b].value = g
  2585.             } catch(f) {}
  2586.         }
  2587.         if (a[b].getAttribute("id") == "userEmail") {
  2588.             a[b].focus();
  2589.             try {
  2590.                 var d = NTK.prefs.getCharPref("shareUserEmail");
  2591.                 a[b].value = d
  2592.             } catch(f) {}
  2593.         }
  2594.         b = b - 1
  2595.     }
  2596. }
  2597. function doFocus3() {
  2598.     try {
  2599.         var g = NTK.prefs.getCharPref("shareUsername");
  2600.         var b = "http://www.newtabking.com/share/" + g;
  2601.         var a = document.getElementsByTagName("textarea");
  2602.         var d = a.length;
  2603.         var c = d - 1;
  2604.         while (c >= 0) {
  2605.             if (a[c].getAttribute("id") == "urlEmbed") {
  2606.                 try {
  2607.                     a[c].value = '<a href="' + b + '">My most used web sites</a>'
  2608.                 } catch(f) {}
  2609.             }
  2610.             c = c - 1
  2611.         }
  2612.         var a = document.getElementsByTagName("urlEmdX");
  2613.         var d = a.length;
  2614.         var c = d - 1;
  2615.         while (c >= 0) {
  2616.             a[c].innerHTML = '<a class="aShare" href="' + b + '">' + b + "</a>";
  2617.             c = c - 1
  2618.         }
  2619.     } catch(f) {}
  2620. }
  2621. function generateSharingContent() {
  2622.     var b, a, c, f;
  2623.     b = [removeDuplicatesFilter, fixEmptyTitlesFilter, removeWWWFromTitles, filterBlackList];
  2624.     try {
  2625.         a = NTK.prefs.getBoolPref("bookmarksOnly")
  2626.     } catch(d) {
  2627.         a = false;
  2628.         NTK.prefs.setBoolPref("bookmarksOnly", false)
  2629.     }
  2630.     c = getPlaces(10 * NTK.prefs.getIntPref("maxMostUsedSites"), true, a);
  2631.     c = filterPlaces(c, b);
  2632.     numMostUsedSites = c.length;
  2633.     html = getPlacesAsSharingCharts(c);
  2634.     return html
  2635. }
  2636. function getSharingSites() {
  2637.     var d = document.getElementsByTagName("share");
  2638.     var g, b, f, e;
  2639.     var a = "";
  2640.     for (var c = (d.length) / 2; c < d.length; c++) {
  2641.         e = d[c].firstChild.checked;
  2642.         if (e == false) {
  2643.             continue
  2644.         }
  2645.         g = encodeURI(d[c].getAttribute("titleX"));
  2646.         b = escape(d[c].getAttribute("hrefX"));
  2647.         f = escape(d[c].getAttribute("visitsX"));
  2648.         if (a != "") {
  2649.             a += "<->"
  2650.         }
  2651.         a += (g + "::::" + b + "::::" + f)
  2652.     }
  2653.     return a
  2654. }
  2655. function switchBookmarksOnly(b) {
  2656.     var c, a;
  2657.     c = NTK.prefs.getBoolPref("bookmarksOnly");
  2658.     if (c) {
  2659.         NTK.prefs.setBoolPref("bookmarksOnly", false)
  2660.     } else {
  2661.         NTK.prefs.setBoolPref("bookmarksOnly", true)
  2662.     }
  2663.     a = document.getElementById("mainContent");
  2664.     a.innerHTML = generateContent();
  2665.     document.getElementById("box3").style.height = box3Const + (numMostUsedSites) * box3ConstBarConst + "px";
  2666.     writeCurrentBookmarksOnlyText();
  2667.     rebuildPage()
  2668. }
  2669. function refreshRelatedSites() {
  2670.     if (NTK.prefs.getBoolPref("suggested-pref")) {
  2671.         /*document.getElementById("refreshRelatedProgress").style.display="";*/
  2672.         /*document.getElementById("refreshRelatedRefresh").style.display="none";*/
  2673.         setTimeout(refreshRelatedSitesTimeout, 555)
  2674.     }
  2675. }
  2676. function refreshRelatedSitesTimeout() {
  2677.     populateRelatesSites(true);
  2678.     /*document.getElementById("refreshRelatedProgress").style.display="none";*/
  2679.     /*document.getElementById("refreshRelatedRefresh").style.display=""*/
  2680. }
  2681. function turnOnSuggestions() {
  2682.     var str = getRes("ExpandCollapse");        
  2683.     var str2= getRes("SitesYouWillLove");     
  2684.     var a = '<div id="box5"><hr /><table width="100%"><tr><td><h4 align="left" style="padding:0 0 0 10px;margin:0 0 0 0"><span style="cursor:pointer" onclick="javascript:refreshRelatedSites()" title="Get other suggestions"> '+str2+'</span><!-- <span onclick="javascript:refreshRelatedSites()" title="Get other suggestions" id="refreshRelatedRefresh"><img src="images/refresh2.png" class="refreshBtn"/></span>--><span style="display:none" id="refreshRelatedProgress"><img src="images/progress.gif" class="refreshBtn"/></span></h4></td><td align=right style=padding-right:10px><img id="expCol2" style="cursor:pointer" src="images/collapse.png" title="'+str+'"  onclick="expandCollapse(this,\'relatedSitesId\');" /></td></tr></table>';
  2685.     NTK.prefs.setBoolPref("suggested-pref", true);
  2686.     downloadRelated(true);
  2687.     a += '<div align="left" style="font-size:x-small;color:#555;padding-left:13px;padding-right:13px">Stay tuned for personal suggested sites - we promise exciting findings.</div>';
  2688.     document.getElementById("suggestSitesStub").innerHTML = a;
  2689.     setTimeout(refreshRelatedSitesTimeout, 4444)
  2690. }
  2691. function changeTitleForURL(b, e) {
  2692.     var d = Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsIGlobalHistory2);
  2693.     if (!d) {
  2694.         alert("err");
  2695.         return null
  2696.     }
  2697.     var a = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURI);
  2698.     a.spec = b;
  2699.     var c = d.setPageTitle(a, e)
  2700. }
  2701. function titleEnter(b, a, c) {
  2702.     a = (a) ? a : window.event;
  2703.     if (a.keyCode == 13 && b.value != "") {
  2704.         elem = document.getElementById(c);
  2705.         noLight(elem);
  2706.         elem.innerHTML = replaceHtmlChars(b.value);
  2707.         changeTitleForURL(elem.parentNode.href, replaceHtmlChars(b.value));
  2708.         changing = false;
  2709.         setTimeout(rebuildAfterTimeout, 8000);
  2710.         return false
  2711.     } else {
  2712.         return true
  2713.     }
  2714. }
  2715. function titleBlur(a, b) {
  2716.     if (a.value != "") {
  2717.         elem = document.getElementById(b);
  2718.         elem.innerHTML = replaceHtmlChars(a.value);
  2719.         changeTitleForURL(elem.href, replaceHtmlChars(a.value));
  2720.         changing = false;
  2721.         setTimeout(rebuildAfterTimeout, 8000);
  2722.         return false
  2723.     }
  2724. }
  2725. function launchApp(b) {
  2726.     var a = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  2727.     a.initWithPath(b);
  2728.     a.launch()
  2729. }
  2730.  
  2731. function setBackground() {
  2732.     window.openDialog("chrome://newtabking/content/options-tabs.xul", "NewTabKingOptions", "chrome, toolbar, centerscreen, resizable, scrollbars, dialog, modal", {
  2733.         status: "Reading remote data",
  2734.         maxProgress: 50,
  2735.         progress: 10
  2736.     },
  2737.     onOptionsClose);
  2738.     return
  2739. }
  2740. function doNotepad() {
  2741.     var a = document.getElementById("notepadTxtId").value;
  2742.     doNotepadHeight();
  2743.     var b = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
  2744.     b.data = a;
  2745.     NTK.prefs.setComplexValue("notepadTxt", Components.interfaces.nsISupportsString, b)
  2746. }
  2747. function setTheme(a) {
  2748.     NTK.prefs.setIntPref("ntkTheme", a);
  2749.     rebuildFirstPage();
  2750.     navHome()
  2751. }
  2752. function onOptionsClose() {
  2753.     /*c = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
  2754.  
  2755.     if (c == "WINNT") {
  2756.         
  2757.     }    else    {
  2758.         NTK.prefs.setIntPref("usageCnt",0);
  2759.     }*/
  2760.     rebuildFirstPage();
  2761.     navHome();
  2762. }
  2763. function createCheckbox(f, a, g, c, e) {
  2764.     var d, b;
  2765.     if (f.substr(0, 6) == "index.") {
  2766.         f = a
  2767.     }
  2768.     if (f.substr(0, 9) == "login.php") {
  2769.         f = a
  2770.     }
  2771.     d = f.substr(0, g);
  2772.     if (d != f) {
  2773.         d = d + "..."
  2774.     }
  2775.     b = '<share hrefX="' + a + '" titleX="' + d.replace(/"/g, "") + '" visitsX="' + e + '"><input checked="true" type="checkbox" class="aI" style=width:15px>';
  2776.     b += ' <span id="r_' + c + '" title="' + a + '">' + d + "</span></input></share>";
  2777.     return b
  2778. }
  2779. function getPlacesAsSharingCharts(a) {
  2780.     var d, c, f, j, b, g;
  2781.     c = getMaxAccessCount(a);
  2782.     d = ('<div class="section">');
  2783.     d += ('<ul class="chartlist" style="width:90%">');
  2784.     f = 100;
  2785.     try {
  2786.         j = NTK.prefs.getIntPref("maxMostUsedSites")
  2787.     } catch(h) {
  2788.         j = 50
  2789.     }
  2790.     for (b = 0; b < a.length && b < j; b++) {
  2791.         if (a[b] == null || a[b].title == null || a[b].uri == null || a[b].accessCount == null) {
  2792.             continue
  2793.         }
  2794.         d += ('<li id="row_' + b + '" style="height:10px" >');
  2795.         d += createCheckbox(a[b].title, a[b].uri, 47, b, a[b].accessCount);
  2796.         d += ('<span class="indexShare" style="width: ' + Math.round(a[b].accessCount * 94 / c) + '%">(' + a[b].accessCount + "%)</span>");
  2797.         d += ("</li>")
  2798.     }
  2799.     numMostUsedSites = b;
  2800.     d += ("</ul>");
  2801.     d += ("</div>");
  2802.     return d
  2803. }
  2804. function addHostToBlackTabList(g, h, e) {
  2805.     var str = getRes("ConfirmRemoving");       
  2806.     answer = confirm(str + " :" + g );
  2807.     if (answer == 0) {
  2808.         return
  2809.     }
  2810.     var h, b, f, a, d;
  2811.     h = 0;
  2812.     for (d = 0; d < e; d++) {
  2813.         b = document.getElementById("tabrow_" + d);
  2814.         if (b != null) {
  2815.             f = b.href;
  2816.             if (f.indexOf(g) != -1) {
  2817.                 b.style.display = "none"
  2818.             }
  2819.         }
  2820.     }
  2821.     try {
  2822.         a = NTK.prefs.getCharPref("blackTablist")
  2823.     } catch(c) {
  2824.         a = ""
  2825.     }
  2826.     if (!a) {
  2827.         a = g
  2828.     } else {
  2829.         a += ";" + g
  2830.     }
  2831.     try {
  2832.         NTK.prefs.setCharPref("blackTablist", a)
  2833.     } catch(c) {
  2834.         printObject("ex", c)
  2835.     }
  2836. }
  2837. function showDelTab(a, b) {
  2838.     var c = document.getElementById("deleteTabImg_" + a);
  2839.     if (b == 1) {
  2840.         c.style.display = ""
  2841.     } else {
  2842.         c.style.display = "none"
  2843.     }
  2844. }
  2845. function launchFolder() {
  2846.     var e, c, b, d, a;
  2847.     e = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("Pers", Components.interfaces.nsIFile);
  2848.     c = e.path;
  2849.     b = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  2850.     b.initWithPath("c:\\windows\\explorer.exe");
  2851.     d = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
  2852.     d.init(b);
  2853.     a = [c];
  2854.     d.run(false, a, a.length)
  2855. };